【问题标题】:Why does append() modify the provided slice? (See example)为什么 append() 会修改提供的切片? (见示例)
【发布时间】:2013-06-30 22:01:22
【问题描述】:

您可以在 Go Playground 上run the example code

代码如下:

package main

import "fmt"

func main() {
    numbers := []int{1, 2, 3, 4, 5}

    fmt.Println(numbers)
    _ = append(numbers[0:1], numbers[2:]...)
    fmt.Println(numbers)
}

输出:

[1 2 3 4 5]
[1 3 4 5 5]

为什么 numbers 切片被 append 修改了?这是预期的行为吗?如果是,你能向我解释为什么吗?我以为append 不会修改它的论点。

【问题讨论】:

  • 您是否阅读了附件中的documentation?我认为它很好地解释了这种行为。

标签: go


【解决方案1】:

http://blog.golang.org/go-slices-usage-and-internals

如果附加到切片的内容不适合当前切片的容量,则追加函数可以分配一个新的底层数组。追加 是否 修改底层数组。您必须重新分配给变量的原因是,正如我在第一句话中所说,可以重新分配底层数组,并且旧切片仍将指向旧数组。

请参阅this play example 了解我在说什么。

【讨论】:

  • 感谢播放示例,使其更清晰
猜你喜欢
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2016-05-24
  • 2023-03-15
  • 1970-01-01
  • 2016-10-20
  • 2015-03-22
  • 1970-01-01
相关资源
最近更新 更多