duan7664 2015-03-18 19:57
浏览 29
已采纳

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

I am seeing some unintended behaviour when trying to delete an element within a slice. Below is my code:

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

the output is:

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

I would expect the output to be:

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

Why is the result not what I expected?

In other words since there is no assignment to change the value x I would expect it to have the same initialized value but for some reason it doesn't and has the same value as y with the last element duplicated. Is this a bug?

  • 写回答

2条回答 默认 最新

  • dongmopu6734 2015-03-18 20:08
    关注

    The append function operates in-place when enough space is available. Slice away the capacity to avoid this behaviour:

    y := append(x[:3:3],x[4:]...)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等