Golang学习Day1

news2024/10/7 10:23:39
😋 大家好,我是YAy_17,是一枚爱好网安的小白。
本人水平有限,欢迎各位大佬指点,欢迎关注 😁,一起学习 💗 ,一起进步 ⭐ 。
⭐ 此后如竟没有炬火,我便是唯一的光。 ⭐

Go语言学习Day1

package main
//表示hello.go文件所在的包是main,在GO中每一个文件都归属于一个包
import "fmt"
//导入一个包,“fmt”,之后便可以使用fmt中的函数,例如"fmt.Println()"
func main() {
    //func是一个关键字,main是函数名,同时也是主函数,是整个程序的入口
	fmt.Println("hello world")
    //使用fmt包中的函数Println()来输出hello world
}

GO语言的两种执行流程

  1. 先编译(go build *.go文件)生成可执行文件(*.exe),之后再运行可执行文件;(可以生成自己命名的可执行程序,go build -o myhello.exe hello.go)

  1. 直接使用go run *.go文件,进行运行

两种执行流程的区别和优缺点:

  1. 如果我们先编译生成可执行文件,再运行可执行文件,那么我们可以将生成的可执行文件移植到一台没有go开发环境的机器上进行执行

  1. 如果我们是直接使用 go run *.go文件,那么就需要运行的机器必须具备go语言的开发环境

  1. 在编译的时候,编译器会将程序运行所依赖的库文件全部包含到可执行文件中,因此生成的可执行文件比较大

Go语言的开发注意事项

Go语言常用的转义字符

// Go语言中的常用转移字符
package main
import "fmt"

func main() {
	fmt.Println("hello\nworld!")
	fmt.Println("hello\tY4y17")
	fmt.Println("D:\\Microsoft VS Code\\GO\\Gocode\\src\\go_code")
	fmt.Println("Y4y17说\"Golang yyds\"")
	fmt.Println("小黑子露出鸡脚了吧\r我是ikun")
}

需要注意的是最后面的\r,其他的都比较的熟悉,\r代表着:输出当前行的内容,然后从\r后面开始的地方,覆盖掉最前面的内容

标识符、关键字和命名规则

标识符的组成

  1. 标识符只能由数字、字母和下划线组成

  1. 标识符的开头只能是字母和下划线

  1. 标识符是区分大小写的

package main
import "fmt"
func main(){
    var name string 	//定义变量的时候要写上var 然后是变量的名字 最后是变量的类型
    var age int 
    var _sys int
}

关键字

GO语言提供了25个关键字;

Golang变量声明

声明变量的语法:

var idetifier type
var:声明变量的关键字
identifier:变量的名称
type:变量的类型
PS:定义变量之后,必须要使用,不使用就会出错!

批量声明

package main
var(
    name string
    age int 
    b bool
)

尝试打印输出:

变量初始化

逐个变量进行初始化

func main() {
	var name string = "Y4y17"
	var age int = 21
	var b bool = true

	fmt.Printf("name:%v\n", name)
	fmt.Printf("age:%v\n", age)
	fmt.Printf("b:%v", b)
}

多个变量初始化

func main() {
   var name,age,b = "Y4y17",21,true
          
    fmt.Printf("name:%v\n", name)
    fmt.Printf("age:%v\n", age)
    fmt.Printf("b:%v", b)
}

类型推断

var name = "Y4y17"	//不需要后面的数据类型

短变量声明

在函数内部,可以使用:=运算符对变量进行声明和初始化

package main
func main(){
	name := "Y4y17"
    age := 21
}

这种方法只适合在函数内部,函数外部不能使用

匿名变量

package main
import "fmt"
func GetNameAndAge() (string, int) {
    return "Y4y17", 21
}

func main() {
    name, age := GetNameAndAge()
    fmt.Printf("name:%v\tage:%v", name, age)
}package main
import "fmt"
func GetNameAndAge() (string, int) {
    return "Y4y17", 21
}

func main() {
    name, age := GetNameAndAge()
    fmt.Printf("name:%v\tage:%v", name, age)
}

//有的时候比如name没有用到,我们还可以用下划线替换掉name
func GetNameAndAge() (string, int) {
    return "Y4y17", 21
}

func main() {
    _,age := GetNameAndAge()
    fmt.Printf("age:%v",age)
}

常量的初始化

有一个比较特殊的常量,他是可以更改值的,iota默认开始值为0,每调用一次加1,遇到const关键字的时候被重置为0

package main

import (
	"fmt"
)
func main() {
	const (
		a1 = iota
		a2 = iota
		a3 = iota
	)
	fmt.Printf("a1: %v\n", a1)
	fmt.Printf("a2: %v\n", a2)
	fmt.Printf("a3: %v\n", a3)
}
//输出的结果为0 1 2

使用”_“来跳过某一些值

package main

import (
	"fmt"
)
func main() {
	const (
		a1 = iota
		_
		a3 = iota
	)
	fmt.Printf("a1: %v\n", a1)
	
	fmt.Printf("a3: %v\n", a3)
}
//输出的结果为0  2

iota中间插队

package main

import (
	"fmt"
)
func main() {
	const (
		a1 = iota
		_
		a3 = iota
	)
	fmt.Printf("a1: %v\n", a1)
	
	fmt.Printf("a3: %v\n", a3)
}
//输出的结果为0  2

Go语言的数据类型

package main
import (
    "fmt"
)

func main() {
    var name string = "zhangsan"
    age := 20
    b := true
    fmt.Printf("%T\n%T\n%T\n", name, age, b)
    inter := &age
    fmt.Printf("%T\n", inter)

    a := [2]int{1, 2}e
    fmt.Printf("%T\n", a)
    c := []int{1,2,3}
    fmt.Printf("%T\n",c)
}

分别输出:

最后面的c := []int{1,2,3} 他不是数组,它叫做切片,也是个动态的数组,就是当长度不指定的时候,便是切片;

数字类型:

Go语言字符串字面量

在Go语言中,字符串字面量使用双引号”“或者是反引号来创建。在Go语言中没有char类型,单行的字符串用双引号,多行的字符串用的是反引号;

package main

import "fmt"

func main() {
	var str string = "hello"
	str2 := `
		line 1
		line 2
		line 3
	`
	fmt.Printf("str: %v\n", str)
	fmt.Printf("str2: %v\n", str2)
}

字符串的连接

”+“号

package main
import (
    "fmt"
)
func main() {
    name := "Y4y17"
    age := "20"
    s := name + age
    fmt.Printf("s: %v\n", s)
    
}

fmt.Sprintf()

package main
import (
    "fmt"
)
func main() {
    name := "Y4y17"
    age := "20"
    s1 := fmt.Sprintf("%v,%v", name, age)
    fmt.Printf("s1: %v\n", s1)
}

strings.Join()

package main
import (
    "fmt"
    "strings"
)
func main() {
    name := "Y4y17"
    age := "20"
    s2 := strings.Join([]string{name, age}, ",")
    fmt.Printf("s2: %v\n", s2)
}
//strings.Join这种方式,两个参数,第一个参数是一个用来连接的空的数组,第二个参数是
//用来连接时的中间的分隔符

write.buffer

package main

import (
    "bytes"
    "fmt"
)

func main() {
    var buffer bytes.Buffer
    buffer.WriteString("Y4y17")
    buffer.WriteString(",")
    buffer.WriteString("20")
    fmt.Printf("buffer.String(): %v\n", buffer.String())
}

Go语言中的切片操作

package main

import "fmt"
func main() {
    s := "hello world"
    n := 3
    m := 5
    fmt.Printf("s[n]: %v\n", s[n])
    fmt.Printf("s[n:m]: %v\n", s[n:m])		//前闭后开区间  [)
    fmt.Printf("s[n:]: %v\n", s[n:])
    fmt.Printf("s[:m]: %v\n", s[:m])
}

Go语言中的字符串函数

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "hello World"
    //返回字符串的长度
    fmt.Printf("len(s): %v\n", len(s))
    //字符串的分割函数
    fmt.Printf("strings.Split(s, \" \"): %v\n", strings.Split(s, " "))
    //判断字符串中是否包含另一个字符串
    fmt.Printf("strings.Contains(s, \"hello\"): %v\n", strings.Contains(s, "hello"))
    //转换小写
    fmt.Printf("strings.ToLower(s): %v\n", strings.ToLower(s))
    //转化大写
    fmt.Printf("strings.ToUpper(s): %v\n", strings.ToUpper(s))
    //判断字符串中是否含有某个前缀
    fmt.Println(strings.CutPrefix(s, "hello"))
    //判断字符串中时候含有某个后缀
    fmt.Println(strings.CutSuffix(s, "World"))

}

Go格式化输出

package main

import "fmt"

type website struct {
    name string
}

func main() {
    site := website{name: "Y4y17.com"}
    fmt.Printf("site: %v\n", site)  //%v 代表的就是var
    fmt.Printf("site: %#v\n", site) //%#v 会将详细内容输出
    fmt.Printf("site: %T\n", site)  //%T代表的是type
}

Go语言的运算符

与其他的语言一样,+ - * / %的用法都是一样的,当然还有自增和自减的运算符(++ --)

package main
import "fmt"
func main() {
    a := 10
    b := 21
    fmt.Printf("a: %v\n", a)
    fmt.Printf("b: %v\n", b)
    fmt.Printf("(a + b): %v\n", (a + b))
    fmt.Printf("(a - b): %v\n", (a - b))
    fmt.Printf("(a / b): %v\n", (a / b))
    fmt.Printf("(a * b): %v\n", (a * b))
    //fmt.Printf("(b % a): %v\n", (b % a))
    c := b % 10
    fmt.Printf("c: %v\n", c)
    //++ --
    a++
    fmt.Printf("a: %v\n", a)
    b--
    fmt.Printf("b: %v\n", b)
}
/*
a: 10
b: 21
(a + b): 31
(a - b): -11
(a / b): 0
(a * b): 210
c: 1
a: 11
b: 20
*/

Golang中的选择结构

if else语句

package main

import "fmt"

func main() {
    a := 18
    if a > 18 {
        fmt.Println("成年")
    } else {
        fmt.Println("未成年")
    }
}

Go语言不同于其他的语言,它可以在if语句中定义变量:

package main

import "fmt"

func main() {
    if a := 18; a > 18 {
        fmt.Println("成年")
    } else {
        fmt.Println("未成年")
    }
}

if else if语句

package main

import "fmt"

func main() {
    if a := 18; a > 18 {
        fmt.Println("成年")
    } else if a < 18 {
        fmt.Println("未成年")
    } else {
        fmt.Println("18岁")    
    }
}

switch结构

package main
import "fmt"
func f1() {
    var day int
    fmt.Scan(&day)
    switch day {
    case 1, 2, 3, 4, 5:	//只要匹配到一个值就可以
        fmt.Println("work day")
    case 6, 7:
        fmt.Println("relax")
    default:
        fmt.Println("输入出错")
    }
}

func main() {
    f1()
}
在Go语言中,不需要使用break
package main

import "fmt"

func f1() {
    score := 60
    //当switch后面什么都不写的时候,默认为true
    switch {
    case score >= 60:
        fmt.Println("及格")
    case score > 70 && score <= 100:
        fmt.Println("优秀")
    default:
        fmt.Println("不及格")
    }
}

func main() {
    f1()
}

fallthrough(穿漏)

package main

import "fmt"

func f1() {
    score := 100
    switch score {
    case 100:
        fmt.Println("100")
        fallthrough		//加上fallthrough的时候,会继续向下执行
    case 200:
        fmt.Println("200")
    case 300:
        fmt.Println("300")
    }
}
func main() {
    f1()
}

Go语言中switch语句的注意事项

  1. 支持多条件匹配

  1. 不同的case之间不使用break分割,默认只会执行一个case

  1. 如果想要执行多个case,需要使用fallthrough关键字,也可以用break终止

  1. 分支还可以使用表达式,例如a>10

Go语言中的for循环

//格式还是和其他的语言是一样的,只不过不需要加上括号
package main

import "fmt"

func f1() {
	// i := 1
	// for i <= 10 {
	// 	fmt.Printf("i: %v\n", i)
	// 	i++
	// }
	for i := 1; i <= 10; i++ {
		fmt.Printf("i: %v\n", i)
	}
}
func main() {
	f1()
}

for range循环

Go语言中可以使用for range遍历数组、切片、字符串、map以及通道。通过for range遍历的返回值具有以下的规律:

  1. 数组、切片、字符串返回索引和值

  1. map返回键和值

  1. 通道只返回通道内的值

package main

import "fmt"

func f() {
	var a = [...]int{1, 2, 3, 4, 5, 6}	//当[]内什么都不写的时候,就是切片
	
	// for i, v := range a {
	// 	fmt.Printf("i: %v\tv: %v\n", i, v)
	// }

    //还可以直接输入forr,快捷键
	for _, v := range a {
		fmt.Printf("v: %v\n", v)
	}
}
func main() {
	f()
}
package main

import "fmt"

func f() {
    m := make(map[string]string, 0)
    m["name"] = "Y4y17"
    m["age"] = "23"
    m["email"] = "Y4y17@email.com"
    for key, value := range m {
        fmt.Printf("key: %v\tvaule: %v\n", key, value)
    }
}
func main() {
    f()
}

Go语言中的跳转语句

break

break除了在switch 和 for循环中去使用,还可以在标签中使用:

package main

import "fmt"

func f() {
MYLABEL:
    for i := 0; i < 10; i++ {
        fmt.Printf("i: %v\n", i)
        if i >= 5 {
            break MYLABEL
        }
    }
    fmt.Println("END")
}

func main() {
    f()
}

continue

package main

import (
    "fmt"
)

func f1() {
    for i := 0; i < 10; i++ {
    MYLABLE:
        for j := 0; j < 10; j++ {
            if i == 2 && j == 2 {	//跳过i=2 j=2的情况
                continue MYLABLE
            }
            fmt.Printf("%v:%v\n", i, j)
        }
    }
}
func f() {
    for i := 0; i < 10; i++ {
        if i == 2 {
            continue
        } else {
            fmt.Printf("i: %v\n", i)
        }
    }
}

func main() {
    // f()
    f1()
}

goto

goto语句常用于跳出多层循环

package main

import (
	"fmt"
)

func f2() {
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if i == 2 && j == 2 {	//当i=2 j=2的时候,直接跳出两个循环,跳到END继续运行
				goto END
			}
			fmt.Printf("%v:%v\n", i, j)
		}
	}
END:
	fmt.Printf("end...")
}
func main() {
    f2()
}

Go语言中的数组

定义和初始化

package main

import "fmt"

func test1() {
    //数组的定义
    var a1 [2]int
    var a2 [3]string
    var a3 [2]bool
    fmt.Printf("a1: %T\n", a1)
    fmt.Printf("a2: %T\n", a2)
    fmt.Printf("a3: %T\n", a3)

    //数组的初始化
    var a4 = [2]int{3, 4}
    var a5 = [2]string{"Y4y17", "hello"}
    var a6 = [2]bool{true, false}
    fmt.Printf("a4: %v\n", a4)
    fmt.Printf("a5: %v\n", a5)
    fmt.Printf("a6: %v\n", a6)
    var a7 = [...]int{7, 8, 9}
    fmt.Printf("len(a7): %v\n", len(a7))
    //根据索引进行赋值
    var a8 = []int{0: 1, 5: 9}
    var a9 = []string{1: "Y4y17", 8: "hello"}
    fmt.Printf("a8: %v\n", a8)
    fmt.Printf("a9: %v\n", a9)
}
func main() {
    test1()
}

数组的遍历

package main

import "fmt"

func test1() {
    var a = [5]int{1, 2, 3, 4, 6}
    for i := 0; i < len(a); i++ {
        fmt.Printf("a[%v]: %v\n", i, a[i])
    }
}
func test2() {
    var str = [4]string{"Y4y17", "hello", "world", "7777"}
    for i, v := range str {		//其中i代表的是索引值,v代表的就是str[i]
        //如果不想使用i(索引值),那么我们可以将i修改为下划线(_)
        fmt.Printf("str[%v]: %v\n", i, v)
    }
}
func main() {
    test1()
    fmt.Printf("-----------\n")
    test2()
}

输出结果如下:

Go语言中的切片

切片的声明

package main

import "fmt"

func test1() {
    //切片的声明
    var list1 []int
    fmt.Printf("list1: %v\n", list1)
    var list2 = make([]int, 2)
    fmt.Printf("list2: %v\n", list2)
    //切片的初始化
    var list3 = []int{1, 2, 3}
    fmt.Printf("list3[1]: %v\n", list3[1])
    //输出list2的长度和容量
    fmt.Printf("len(list2): %v\n", len(list2))
    fmt.Printf("cap(list2): %v\n", cap(list2))
}
func main() {
    test1()
}

切片的初始化

针对切片的切分遵循:左闭右开 即 [ )

package main

import "fmt"

func test1() {
    //第一种初始化
    var list1 = []int{1, 2, 3, 4}
    fmt.Printf("list1: %v\n", list1)
    //第二种初始化
    //利用数组进行初始化
    var a = [...]int{1, 2, 3, 4, 5, 6}
    list2 := a[2:5]
    fmt.Printf("list2: %v\n", list2)
    list3 := a[2:]
    fmt.Printf("list3: %v\n", list3)
    list4 := a[:]
    fmt.Printf("list4: %v\n", list4)
    list5 := a[:5]
    fmt.Printf("list5: %v\n", list5)
}
func main() {
    test1()
}

切片的遍历

同样切片的遍历和数组的遍历类似,存在两种遍历的方式:

package main
import "fmt"
func test1() {
    var list1 = []int{1, 2, 3, 4, 5, 6}
    for i := 0; i < len(list1); i++ {
        fmt.Printf("list1[%v]: %v\n", i, list1[i])
    }
}
func test2() {
    var list1 = []int{1, 2, 3, 4, 5, 6}
    for i, v := range list1 {
        fmt.Printf("i:%v v: %v\n", i, v)
    }
}
func main() {
    // test1()
    test2()
}

切片的增删改查

package main

import "fmt"

//add
func add() {
	var list = []int{1, 3, 2, 5, 99}

	list = append(list, 100)
	fmt.Printf("list: %v\n", list)
}

//delete
func delete() {
	var list = []int{1, 2, 3, 4, 5, 6, 7}
	list = append(list[:3], list[4:]...) //删除索引为3的元素
	fmt.Printf("list: %v\n", list)
}

//update
func update() {
	var list = []int{1, 2, 3, 4, 5, 6, 7}
	list[4] = 777
	fmt.Printf("list: %v\n", list)
}

//query
func query() {
	var list = []int{1, 2, 3, 4, 5, 6, 7}
	key := 5
	for _, v := range list {
		if key == v {
			fmt.Printf("v: %v\n", v)
		}
	}
}

//copy函数的用法
func test() {
	var list = []int{1, 2, 3, 4}
	var list2 = make([]int, 4)
	copy(list2, list)

	// fmt.Printf("list: %v\n", list)
	fmt.Printf("list2: %v\n", list2)

}
func main() {
	//add()
	// delete()
	// update()
	//query()
	test()
}

Go语言中的map

map是一种无序的键值对的集合;最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值;

两种定义map的方式:

  1. 一种是通过内建函数make

  1. 另一种是通过map关键字来定义Map

package main

import "fmt"
func test2() {
	map1 := map[string]string{"name": "Y4y17", "age": "23", "email": "xxx.com"}
	for _, v := range map1 {
		fmt.Printf("v: %v\n", v)
	}
}
func test1() {
    //map的声明
    var map1 map[string]string
    //创建集合
    map1 = make(map[string]string)
    //map 插入key-value对
    map1["name"] = "Y4y17"
    map1["age"] = "23"
    map1["email"] = "xxx.com"
    //使用键来输出map值
    for site := range map1 {
        fmt.Println(site, "---->", map1[site])
    }
    v, ok := map1["name"]
    fmt.Printf("v: %v\n", v)
    fmt.Printf("ok: %v\n", ok)
    v, ok = map1["ages"]
    fmt.Printf("v: %v\n", v)
    fmt.Printf("ok: %v\n", ok)
}
func main() {
    test1()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GEE学习笔记 五十一:Fusion Table将在2019年12月3日关闭

刚刚看到的一则消息&#xff0c;Google运行了9年之久的Fusion Table将在2019年12月3日关闭相关服务&#xff0c;同时也就是未来Google Earth Engine&#xff08;GEE&#xff09;上将不会存在Fusion Table这一数据&#xff0c;GEE官方也不再建议用户使用Fusion Table数据。 目前…

anaconda:安装cuda和对应版本的cudnn

复现别人论文的时候经常遇到不同的cuda版本&#xff0c;可以使用anaconda创建虚拟环境&#xff0c;并在不同的虚拟环境中配置对应的cuda版本 1、安装anaconda及虚拟环境使用 Anaconda多个python版本&#xff08;python2.7 & python3.8&#xff09; 2、安装cuda和对应版本…

【机器学习】噪声数据的理解

文章目录一、噪声数据1.1 分箱1.2 回归1.3 聚类1.4 其他二、数据清理作为一个过程2.1 偏差检测2.1.1 使用“元数据”&#xff1a;关于数据的数据2.1.2 编码格式&#xff1a;存在使用不一致、数据表示不一致2.1.3 字段过载2.1.4 唯一性规则2.1.5 连续性规则2.1.6 空值规则2.2 数…

爆赞!首次公布阿里Java成长路线,Github访问量突破80万

作为程序员&#xff0c;进大厂是大多数人的梦想&#xff0c;进大厂的好处也如下图一样&#xff1a; 有面儿&#xff0c;不易失业。牛人多&#xff0c;培训多&#xff0c;成长更快。钱多。有较为完善的晋升规则。站在巨人肩膀人&#xff0c;眼界开阔更何况程序员不同于其他行业…

zabbix4.0安装部署

目录 1.1、添加 Zabbix 软件仓库 1.2、安装 Server/proxy/前端 1.3、创建数据库 1.4、导入数据 1.5、为 Zabbix server/proxy 配置数据库 1.6、 启动 Zabbix server 进程 1.7、zabbix前端配置 SELinux 配置 1.8、安装 Agent 1.9、启动zabbix 2.0、访问zabbix 1.1、添加…

【图像处理OpenCV(C++版)】——4.6 限制对比度的自适应直方图均衡化

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

使用FORCE训练的脉冲神经网络中的监督学习(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 1.1 脉冲神经网络简介 脉冲神经网络 (SNN) 属于第三代神经网络模型&#xff0c;实现了更高级的生物神经模拟水平。除了神经元和…

3.知识图谱概念和相关技术简介[知识抽取、知识融合、知识推理方法简述],典型应用案例介绍国内落地产品介绍。一份完整的入门指南,带你快速掌握KG知识,芜湖起飞!

1. 知识图谱(KG)的概念 知识图谱(KG)得益于Web的发展(更多的是数据层面),有着来源于KR、NLP、Web、AI多个方面的基因。知识图谱是2012年后的提法,基础还是语义网和本体论。 知识图谱的本质包含: 知识表示——Knowledge Representation基于知识表示的知识库——Knowledge…

OpenGL入门demo

开发环境visual studio 2022 preview版本&#xff0c;x64版本安装OpenGL首先OpenGL是windows系统里面自带的&#xff0c;我们可以不用去下载最新版。直接在此基础上配置OpenGL的三个扩展库glew&#xff0c;glfw&#xff0c;flut就可以了。下载OpenGL的开发依赖类库&#xff1a;…

【java】Spring Cloud --Spring Cloud Alibaba 微服务解决方案

文章目录1、Spring Cloud Alibaba 是什么先说说 Spring CloudSpring Cloud Alibaba和Spring Cloud 的区别和联系Spring Cloud Alibaba2、Spring Cloud Alibaba 包含组件阿里开源组件阿里商业化组件集成 Spring Cloud 组件3、Spring Cloud Alibaba 功能服务注册与发现支持多协议…

python-剑指 Offer 42. 连续子数组的最大和【动态规划经典题解】

一.题目 剑指 Offer 42. 连续子数组的最大和 描述&#xff1a;输入一个整型数组&#xff0c;数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2…

html初识

HTML认知 文章目录HTML认知语法规范注释标签组成和关系标签的关系标签学习排版系列标签**标题标签****段落标签**换行标签水平线标签文本格式化标签媒体标签图片标签src 目标图片的路径alt 替换文本title 图片的标题width 宽度 / height 高度路径绝对路径相对路径&#xff08;常…

feature分支开发到一半时切换到bugfix分支,如何暂存数据

1、解决思路在工作过程中&#xff0c;当你正在当前feature分支上进行功能的开发&#xff0c;突然来了一个bug&#xff0c;要创建一个bugfix修复分支进行修复。但是当前feature分支你只开发了一半&#xff0c;显然你去提当前的半成品是不合适的&#xff0c;我们如何处理此类问题…

面试题-----JDBC单例模式(懒汉式和饿汉式)

1.单例概念 作为一种常见的设计模式&#xff0c;单例模式的设计概念是"两个私有,一个公有",即私有属性/成员变量和私有构造,以及公有方法,常用于在整个程序中仅调用一次的代码。 2.具体操作 从单例模式的描述来看,单例模式并不能用于多次频繁调用的设计中,而更适用…

【Linux】进程状态|优先级|进程切换|环境变量

文章目录1. 运行队列和运行状态2. 进程状态3. 两种特殊的进程僵尸进程孤儿进程4. 进程优先级5. 进程切换进程特性进程切换6. 环境变量的基本概念7. PATH环境变量8. 设置和获取环境变量9. 命令行参数1. 运行队列和运行状态 &#x1f495; 运行队列&#xff1a; 进程是如何在CP…

如何在Net6.0里配置多版本支持并支持注释说明的Swagger

一、前言现在已经进入了微服务的开发时代了&#xff0c;在这个时代&#xff0c;如果有人问你什么是微服务&#xff0c;你说不知道&#xff0c;就有点太丢人了&#xff0c;别人会有异样的眼光看你&#xff0c;俗话说&#xff1a;唾液淹死人。没办法&#xff0c;我们只能去学习新…

一款 Linux、数据库、Redis、MongoDB 统一管理平台,这个开源平台非常好用!

一、开源项目简介基于DDD分层实现的web版 linux(终端 文件 脚本 进程)、数据库&#xff08;mysql postgres&#xff09;、redis(单机 集群)、mongo统一管理操作平台二、开源协议使用Apache-2.0开源协议三、界面展示&#xff08;系统核心功能截图&#xff09;四、服务部署&#…

Windows 平台 oracle11g 单机 打补丁(33883353)

一、从oracle官网下载最新补丁包和打包工具 二、 对数据库及软件作全备 略 三、解压p33883353_112040_MSWIN-x86-64.zip 在33883353文件夹中打开README.html 2.1 OPatch Utility You must use the OPatch utility version 11.2.0.3.34 or later to apply this patch. 必须…

Maven 依赖-镜像仓库替换为 -- 阿里云镜像仓库(飞快实现 pom 引入)

在本地 maven 的 setting 配置文件中加上阿里云镜像地址就行了&#xff1a;新增配置内容&#xff1a;<!-- 阿里镜像仓库 --><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus…

高项--十大管理、47个过程、五大过程组

十大管理、47个过程、五大过程组【联想记忆】 文章目录 十大管理、47个过程、五大过程组【联想记忆】 十大管理 1.十大管理是哪几个&#xff1f; 2.十大管理记忆口诀&#xff1a; 3.各大管理记忆口诀&#xff1a; 4.十大管理、十大管理的47个过程、47个过程所属的五大过程组&a…