问一下各位: 切片取了messages 的2 ~ 5 也就是 3,4,5 len为3 cap为什么是8 而不是7(去除3,4,5) 或者 messages的容量10 下面是详细的代码 和输出结果
```go
func main() {
// 切片截取
messages := []int { 1,2,3,4,5,6,7,8,9,0 } //创建切片
messages2 := messages [2:5]
printSlice( messages2)
}
func printSlice ( x []int){
fmt.Printf( "len=%d cap=%d slice=%v\n", len(x), cap(x), x )
}
```
![QQ截图20171030174822.jpg](https://static.studygolang.com/171030/83e34df6169c7d47ee133afe9deab30c.jpg)
1.底层对应数组{1,2,3,4,5,6,7,8,9,0}
2.截取[2:5]的切片后相当于抛弃了前面两个元素{1, 2}
3.所以最后剩下的容量为10-2=8个元素
4.容量的实质意义就是message2对应的底层数组元素数量
亦即,对于message2这个切片只能“看到”3-0折8个元素
5.后续你要对message2再做切片 只能在这8个元素上切
6.当然如果你要在message上切 依然可切10个元素
#4
更多评论
http://docs.studygolang.com/ref/spec#Slice_expressions 看这里的说明
> a[low : high : max]
> it controls the resulting slice's capacity by setting it to max - low
#2