Arrays 容量何时不同于阵列的结尾-切片的开始?
在本书中,作者陈述了以下内容(见第4.2节切片): [切片的]长度是切片元素的数量;它不能超过容量,容量通常是片的开始和底层数组的结束之间的元素数Arrays 容量何时不同于阵列的结尾-切片的开始?,arrays,go,slice,Arrays,Go,Slice,在本书中,作者陈述了以下内容(见第4.2节切片): [切片的]长度是切片元素的数量;它不能超过容量,容量通常是片的开始和底层数组的结束之间的元素数 x := make([]string, 20) y := x[0:10:10] fmt.Println("x:", len(x), cap(x)) // prints x: 20 20 fmt.Println("y:", len(y), cap(y)) // prints y: 10 10 问题: 由于作者
x := make([]string, 20)
y := x[0:10:10]
fmt.Println("x:", len(x), cap(x)) // prints x: 20 20
fmt.Println("y:", len(y), cap(y)) // prints y: 10 10
问题:
由于作者选择使用“通常”一词,这意味着事实上,在某些情况下,片的容量与片的开始和基础数组的结束之间的元素数不同——这种情况何时发生
换言之,下面的表达式何时为true:
cap(mySlice)!=len(底层阵列)-startIndexOfSlice
我能想到的唯一一种情况是,切片为nil
,在这种情况下,将不会有底层数组。一个完整的切片可以设置低于完整底层数组的容量
x := make([]string, 20)
y := x[0:10:10]
fmt.Println("x:", len(x), cap(x)) // prints x: 20 20
fmt.Println("y:", len(y), cap(y)) // prints y: 10 10
片
x
和y
共享相同的底层数组,但是y
的容量小于x
的容量,谢谢!我不知道切片表达式的这种变化。这就像切片s[i:j]
的镜像操作,其中低索引为i>0
,结果切片永远失去对具有索引
的底层数组中元素的引用。