Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 容量何时不同于阵列的结尾-切片的开始?_Arrays_Go_Slice - Fatal编程技术网

Arrays 容量何时不同于阵列的结尾-切片的开始?

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 问题: 由于作者

在本书中,作者陈述了以下内容(见第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
问题: 由于作者选择使用“通常”一词,这意味着事实上,在某些情况下,片的容量与片的开始和基础数组的结束之间的元素数不同——这种情况何时发生

换言之,下面的表达式何时为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
,结果切片永远失去对具有索引
的底层数组中元素的引用。