gpt4 book ai didi

go - 为什么 Go slice 不只是在重新分配时切换底层数组?

转载 作者:IT王子 更新时间:2023-10-29 01:45:24 25 4
gpt4 key购买 nike

slice 包含三个组成部分:长度、容量和指向底层数组的指针。

当我们尝试追加到一个已满的 slice (len(s) == cap(s))时,将分配一个更大的数组。

我在一本书上看到,我们必须将 append 的返回值赋值回 slice,因为底层数组的重新分配可能会返回不同的 slice。

runes = append(runes, r)

但我不知道为什么这是必要的。我们不能重新分配一个新数组并更新原始 slice 实例的指针吗?

最佳答案

在 Go 中,所有函数参数都是按值传递的。函数不能更改调用者的值。

slice (长度、容量、指针)按值传递给追加函数。因为 append 不能改变调用者的 slice ,append 函数返回新的 slice 。

可以编写 append 函数来获取一个指向 slice 的指针,但是在 slice 值不可寻址的许多情况下,这会使 append 难以使用。

关于go - 为什么 Go slice 不只是在重新分配时切换底层数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35906405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com