如何防护恶意网站,自贡公司做网站,腾讯云服务器费用,英文网站设计理念理解 Go 语言中 slice 的性质对于编程非常有益。下面#xff0c;我将通过代码示例来解释切片在不同函数之间传递并执行 append 操作时的具体表现。 本篇为第 2 篇#xff0c;当切片的容量 cap 不够时 func main() {// slice1 当前长度为 3#xff0c;容量大小也为 3slice1 :…理解 Go 语言中 slice 的性质对于编程非常有益。下面我将通过代码示例来解释切片在不同函数之间传递并执行 append 操作时的具体表现。 本篇为第 2 篇当切片的容量 cap 不够时 func main() {// slice1 当前长度为 3容量大小也为 3slice1 : make([]int, 3, 3)fmt.Println(slice 1, slice1, len(slice1), cap(slice1))test1(slice1)fmt.Println(slice 1, slice1, len(slice1), cap(slice1))
}func test1(slice2 []int) {slice2[0] 1slice2 append(slice2, 1) // append 操作slice2[0] 2fmt.Println(slice 2, slice2, len(slice2), cap(slice2))
}输出
slice 1 [0 0 0] 3 3
slice 2 [2 0 0 1] 4 6
slice 1 [1 0 0] 3 3解释在 test1 函数中我们首先将 slice2 的第一个元素设为 1这个更改也反映在 slice1 上然后对其执行 append 操作。
因为 slice2 的容量已满3/3所以 append 操作会触发底层数组的扩容。 当新的底层数组准备好之后我们再次更改 slice2 的第一个元素将其设为 2。这次的更改并不影响 slice1因为扩容操作已使 slice2 指向新的底层数组。
示意图如下