今日总结
今日学习了go的slice,内容比较多没看完。
学到的知识点
1. 创建切片的方式
make最多
// 方式1. var
var a []int // 此时切片是空的
// 方式2. make
b1 := make([]int, 2) // 后两位参数分别为 len、cap 此时 len == cap
b2 := make([]int,2, 4) // len=2 --会初始化两个元素0, cap的为4
// 方式3 直接初始化值
c := []int{1,2,3,4}
c1 := []int{0,1,2,3, 8: 100} // 这里8代表最大索引为8,最后一个元素是100
等效于 {0, 1, 2, 3, 0, 0, 0, 0, 100}
// 方式4: 切片中切出
aa = []int{1,2,3,4,5}
bb := [1:3] // 左包含右边不包含
2. 切片是引用,切出来的东东仍然是引用
底层是数组,它的容量可以自动扩展,当达到容量后,自动扩容,会有开销
3. 切片中切的几种写法
记住原则
- [low:hight] 左包含 右边不包含
- [:hight] 或 [low:] 或 [:]凡是没写具体值,都认为它是定格处理,也就达到原切片最左/最右位置
- [low:high:max] // 三个参数,前两个和原来意义一样;多出的一个代表最大索引,变相指定了cap=max-low
4. 切片类型是切片
// 二维切片
data := [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}, // 最后一行必须要逗号
}
fmt.Printf("data: %#v\n", data)
// 和上面写法等价 但是冗余了
// data := [][]int{
// int{1,2,3},
// int{4,5,6},
// int{7,8,9},
//}
明日安排
继续学习未完成的slice部分,然后开始学习数组。
网友评论