8

您可以在 Go Playground 上运行示例代码。

这是代码:

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不会修改它的论点。

4

1 回答 1

16

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

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

请参阅此播放示例以确切了解我在说什么。

于 2013-06-30T22:14:17.680 回答