// 字典
// 1、引用类型
// 2、var val map[string]int 其中 val 初始化值为nil,可读取,但写操作会引起恐慌
// 3、val03, ok := val["n3"] 其中 ok是否存在key:n3;val03是其值,不存在则为默认值
// 4、字典并不是并发安全
// 切片
// 1: 占用资源很小,引用类型
// 2: slice[a:b] 包含a索引值,不包含b索引值,默认容量上界索引为被操作对象容量上界索引
// 3: slice[a:b:c] 包含a索引值,不包含b索引值,容量上界索引为c
// 4: slice 只能向后扩展,不能向前扩展
// 5: slice append
// (1)某次操作未超过该slice容量上界索引,此次改变会更新原数组;
// (2)某次操作超过该slice容量上界索引则新的被操作对象数组会被新建,此次改变不会更新原数组
numArr := [10]uint{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice0 := numArr[3:9] // 容量上界索引为10
slice1 := numArr[3:6:8] // 容量上界索引为8
slice1 = append(slice1, 100) // 此次 未超过该slice容量上界索引 更新原数组, 不新建数组
slice1 = append(slice1, 100, 100) // 此次 超过该slice容量上界索引 不更新原数组, 新建数组
for i := 0; i < len(slice0); i++ {
fmt.Println(i, slice0[i])
}
fmt.Println("slice0 ==>", len(slice0), cap(slice0))
for i := 0; i < len(slice1); i++ {
fmt.Println(i, slice1[i])
}
fmt.Println("slice1 ==>", len(slice1), cap(slice1))
运行结果:
0 3
1 4
2 5
3 100
4 7
5 8
slice0 ==> 6 7
0 3
1 4
2 5
3 100
4 100
5 100
slice1 ==> 6 10
有疑问加站长微信联系(非本文作者))