Go中的Subslicing可让您在切片末尾进行切片,只要它仍在底层阵列的容量范围内即可。您不能 在 该切片的开始 之前
进行切片,但是只要不超过最后分配的索引,就可以在该切片之后进行切片。
例如,
s[3:]然后
s[:3]工作,但
s[4:]随后
s[:4]会出现恐慌,因为您正在请求基础数组的索引4到7,该数组仅分配了索引0-5。
有点奇怪,但是这样做确实使您可以最大化任何切片
slice = slice[:cap(slice)]。
https://play.golang.org/p/Gq5xoXc3Vd
该语言规范
annotes此,顺便说一句。我在下面用您所使用的简单切片符号来解释它(有一个替代方法,它也指定了新切片的最大索引)。
对于字符串,数组,指向数组或切片a的指针,主表达式
a[low : high]构造一个子字符串或切片。如果0 <=低<=高<=
cap(a),则索引在范围内,否则它们超出范围。



