尝试删除 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)
}
输出是:
[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/