为什么/如何在切片和变异后保留其初始化值?

  • 本文关键字:保留 变异 初始化 切片 arrays go
  • 更新时间 :
  • 英文 :


我正在学习围棋的基础知识,在这里的教程中发现了这一点。

我不明白为什么s = s[:0]后数组值不是0或零

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 %vn", 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]
切片是数组上的视图。如果超出容量,切片只会创建一个新的更大的阵列并复制内容。如果截断切片,它将继续使用其原始数组。创建较小的切片时,它仍在使用旧的备份数组,其中包含以前操作中剩余的内容。当您追加到该切片时,它将继续使用相同的数组,直到您超出容量为止。

最新更新