请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于golang slice append的使用

西西老师好,我在进行golang slice操作的使用时,遇到了这样一个问题
如图,代码是对 temp 里的字符串进行匹配,如果等于 “foo” 的话,打印去掉这个字符串后的数组ret,但是我不希望 temp 的值发生改变,可是运行代码发现 temp 的值改变了,应该是在执行 append 的时候,我不能理解为什么 temp 会被修改。图二是运行结果,temp 的值从【“foo”,“bar”,“zoo”】变成了【“bar”,“zoo”,“zoo”】。
希望老师帮忙解答一下。

进行append操作后,temp的值发生了改变

temp := []string{"foo", "bar", "zoo"}

	for i := 0; i < len(temp); i++ {
		if temp[i] == "foo" {
			fmt.Println(temp[:i], "+++", temp[i+1:])

			ret := append(temp[:i], temp[i+1:]...)

			fmt.Println(temp[:i], "+++", temp[i+1:])

			fmt.Println("temp:", temp, "ret:",ret )
			break
		}
	}
	fmt.Println(temp)

正在回答 回答被采纳积分+3

1回答

艾文西 2020-07-04 19:47:04

没看明白你的需求,如果是foo,把foo去掉?

如果这逻辑,你这输出是对的啊,有啥问题?

0 回复 有任何疑惑可以回复我~
  • 提问者 白小九jiu #1
    这个输出不对,temp 的值从【“foo”,“bar”,“zoo”】变成了【“bar”,“zoo”,“zoo”】。"zoo"出现了两次,我不知道为啥会出现两次
    回复 有任何疑惑可以回复我~ 2020-07-06 09:11:41
  • 艾文西 回复 提问者 白小九jiu #2
    你的输出不是ret么,ret不是["bar", "zoo"]么
    回复 有任何疑惑可以回复我~ 2020-07-07 11:44:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信