go语言的坑:切片的拷贝问题 - Go语言中文社区

go语言的坑:切片的拷贝问题


在go语言中的切片变量其实就是一个地址,我们先来看一段代码:

func test_arr() {
	a := []int{1, 2, 3}
	var c [][]int
	b := a
	c = append(c, b)
	c = append(c, b)
	fmt.Println(c)
	c[0][0] = 9
	fmt.Println(c)
	fmt.Println(a)
	change(a)
	fmt.Println(c)
	fmt.Println(b)
}

func change(cp []int) {
	cp[0] = 6
}

  

输出结果如下:

我们不难发现,在上面代码中,并不需要传递切片a的地址,就可以修改a中的值。在这种情况下,如果要拷贝一个新的切片对象的话,就需要使用go语言官方提供的一个内置函数copy(copy_slice,src_slice)。

使用示例:

func test_arr() {
	a := []int{1, 2, 3}
	var c [][]int
	b := make([]int, len(a)) //使用copy函数必须复制切片的结构必须和源数据结构一致
	copy(b, a)
	c = append(c, b)
	c = append(c, b)
	fmt.Println(c)
	c[0][0] = 9
	fmt.Println(c)
	fmt.Println(a)
	change(a)
	fmt.Println(c)
	fmt.Println(b)
}

func change(cp []int) {
	cp[0] = 6
}

执行结果:

 

转载于:https://www.cnblogs.com/codedoge/p/10559108.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_34354945/article/details/94267460
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-30 08:37:10
  • 阅读 ( 1316 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢