go基础学习摘要1| 青训营笔记

77 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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没懂"