如何解决Golang将slice附加到slice的slice上,那么该slice会一直影响slice的slice吗?
今天我收到了以下代码:
import "fmt"
func main() {
var results [][]int
combination := []int{1,2,3,4,5}
results = append(results,combination)
fmt.Println(results)
combination2 := combination[:len(combination)-1]
combination2 = append(combination2,0)
fmt.Println(results)
}
输出显示:
[[1 2 3 4 5]]
[[1 2 3 4 0]]
那么为什么结果受到影响?我找不到任何原因,这让我很困惑,谢谢您的回答!
解决方法
好吧,result
并没有受到直接影响,但是combination
受了(或更确切地说,是其基础数组)。
您“切片” combination
以获得combination2
。它们的底层数组是相同的。
现在,当执行添加操作时,您基本上会说:“在此片结束之后,我需要元素0
”。这样,您还可以将第一个切片的最后一个元素更改为0
。
查看以下示例:https://play.golang.org/p/m0bPJDj9kHs
P.S。您可以使用copy()
操作来防止这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。