我正在参观 Golang 网站,我正在尝试消化其中一个示例。目前还不清楚它是如何工作的:
package main
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)
// Slice the slice to give it zero length.
s = s[:0]
printSlice(s)
// Extend its length.
s = s[:4]
printSlice(s)
// Drop its first two values.
s = s[2:]
printSlice(s)
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
输出是:
len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]
在第一个切片之后,s = s[:0]切片长度为0。然后是另一个切片s = s[:4]。虽然长度为 0,但这似乎有效。但是这是怎么发生的呢?底层数组不应该可以从访问吗s?
更让我困惑的是,下一次切片时,s = s[2:]我们切片的是 s 的旧值(有 4 个元素),而不是原始数组。
有人可以阐明这两种情况有什么区别吗?
慕村9548890
函数式编程
相关分类