Go语言slice[a:b:c]用法注意事项
Posted Demonwuwen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言slice[a:b:c]用法注意事项相关的知识,希望对你有一定的参考价值。
切片
// 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]uint0, 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]用法注意事项的主要内容,如果未能解决你的问题,请参考以下文章