这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
1. go语言的切片小知识点:
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
以上代码中,定义切片的语法格式为:make([ ]string, 长度),先是make()函数,添加两个参数,一个是[]string,string为切片的数据类型,第二个参数为长度,这个长度可以为变量,切片的长度不会因为第二个参数而固定,可以随时改变,空间不够时go语言会自动扩充,扩充的倍数是2。
上面代码块最后两行,定义切片c, 长度为s的长度,之后使用copy函数,copy(目标切片, 源切片)。
make( []Type, size, cap )
cap是预分配的空间,size不控制预配空间,但是cap的大小不会影响size,只是为了提升性能。
//简洁切片:
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
//简洁数组:
a := [2]int{1, 2}
b := [...]int{1, 2}
d := [3]int{1, 2}
注意:
格式同样都是 *** := [] string {元素,...}
简洁数组定义需要指定数组长度,长度不可以是变量,或者,以...填充,go语言会自动根据后面的初始化数据计算数组长度
2. go语言map数据结构的小知识点
m := make(map[string]int)
m["one"] = 1
ages := map[string]int{
"alice": 31,
"charlie": 34,
}
r, ok := m["unknow"]
delete(m, "one")
map数据结构的定义,与切片的定义要区别,make函数里是map[string]int,多了map,方括号中也多了key的类型定义.
如果要定义的map有快速增长项的需求,建议指定一个大小,先一次性分配好,提升性能。
make(map[keytype]valuetype, cap)
map2 := make(map[string]float, 100)
map 中有一个key对应多个value的情况,可以使用
mp1 := make(map[int][]int)
mp2 := make(map[int]*[]int)
"map2没懂"