概述
切片
// 1: 占用资源很小,引用类型
// 2: slice[a:b] 包含a索引值,不包含b索引值,默认容量上界索引为被操作对象容量上界索引
// 3: slice[a:b]的容量默认为被操作对象容量上界索引-a+1
//例如:从[1,2,3,4,5,6,7,8,9] 中取 slice[3,6],容量cap为 9-3+1 = 7
// 4: slice[a:b:c] 包含a索引值,不包含b索引值,容量上界索引为c
// 5:切片后的容量默认为: c-a
// 例如:从[1,2,3,4,5,6,7,8,9] 中取 slice[3,6:7],容量cap为 7 - 3 = 4
//注意: c的值不能小于b,不能大于被操作对象容量上界
// 6: slice 只能向后扩展,不能向前扩展
// 7: slice append
// (1)某次操作未超过该slice容量上界索引,此次改变会更新原数组;
// (2)某次操作超过该slice容量上界索引则新的被操作对象数组会被新建,此次改变不会更新原数组
func main() {
numArr := [10]uint{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice0 := numArr[3:9] // 容量上界索引为10
slice1 := numArr[3:6:7] // 容量上界索引为8
fmt.Println("slice1 len ==>", len(slice1),"slice1 cap ==>", cap(slice1))
slice1 = append(slice1, 100) // 此次 未超过该slice容量上界索引 更新原数组, 不新建数组
slice1 = append(slice1, 100) // 此次 超过该slice容量上界索引 不更新原数组, 新建数组,容量成倍增加
for i := 0; i < len(slice0); i++ {
fmt.Println(i, slice0[i])
}
fmt.Println("slice0 len ==>", len(slice0),"slice0 len ==>", cap(slice0))
for i := 0; i < len(slice1); i++ {
fmt.Println(i, slice1[i])
}
fmt.Println("slice1 len ==>", len(slice1),"slice1 cap ==>", cap(slice1))
}
运行结果:
slice1 len ==> 3 slice1 cap ==> 4
slice1 len ==> 4 slice1 cap ==> 4
0 3
1 4
2 5
3 100
4 7
5 8
slice0 len ==> 6 slice0 len ==> 7
0 3
1 4
2 5
3 100
4 100
slice1 len ==> 5 slice1 cap ==> 8
最后
以上就是幸福缘分为你收集整理的Go语言slice[a:b:c]用法注意事项的全部内容,希望文章能够帮你解决Go语言slice[a:b:c]用法注意事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复