go - 删除 slice 中的元素时分配给新变量会产生意外结果

标签 go append slice

尝试删除 slice 中的元素时,我看到了一些意外行为。下面是我的代码:

package main

import "fmt"

func main() {
    x := []int{1,2,3,4,5,6,7,8}
    y := append(x[:3],x[4:]...)
    fmt.Println(x)
    fmt.Println(y)
}

playground

输出是:

[1 2 3 5 6 7 8 8]
[1 2 3 5 6 7 8]

我希望输出是:

[1 2 3 4 5 6 7 8]
[1 2 3 5 6 7 8]

为什么结果不是我预期的?

换句话说,因为没有赋值来更改值 x 我希望它具有相同的初始化值,但由于某种原因它没有并且与 具有相同的值y 复制了最后一个元素。这是错误吗?

最佳答案

当有足够的可用空间时,append 函数就地运行。切掉容量以避免这种行为:

y := append(x[:3:3],x[4:]...)

关于go - 删除 slice 中的元素时分配给新变量会产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131529/

相关文章:

go - 如何在golang中使用空格距离进行输入

dynamic - 在另一个 div 中 append 一个 div 并在其上单击事件

go - 在 go 中对一个 uint64 slice 进行排序

go - Go 中具有大起始索引的 slice (的底层数组)可以有效地分配内存吗?

go - 分布式 Go 的框架(如 Erlang OTP)?

go - 多个go例程的一个障碍

python list append 方法不返回预期结果?

nested - 通用 Lisp : Appending a nested plist efficiently

python - 批量更新 Python 列表的一部分

Go应用程序文件/包结构