赖思与甜甜,有趣有料有温度,技术学习有思路! Go中的Array数组,是用来存放相同类型元素的固定大小的集合。如何将数组复制到另一个数组呢?看看赖思有何妙招!func main() {arr := [3]int{1, 2, 3}arr2 := arrarr3...

赖思与甜甜,有趣有料有温度,技术学习有思路!
Go中的Array数组,是用来存放相同类型元素的固定大小的集合。如何将数组复制到另一个数组呢?看看赖思有何妙招!
func main() {
arr := [3]int{1, 2, 3}
arr2 := arr
arr3 := &arr
fmt.Printf("原数组:%v \n", arr)
fmt.Printf("赋值方式复制的数组:%v \n", arr2)
fmt.Printf("引用方式复制的数组:%v \n", *arr3)
}
func main() {
arr := [3]int{1, 2, 3}
arr2 := arr
arr3 := &arr
fmt.Printf("原数组:%v \n", arr)
fmt.Printf("赋值方式复制的数组:%v \n", arr2)
fmt.Printf("引用方式复制的数组:%v \n", *arr3)
arr[1] = 1000
fmt.Printf("改变后原数组:%v \n", arr)
fmt.Printf("改变后赋值方式复制的数组:%v \n", arr2)
fmt.Printf("改变后引用方式复制的数组:%v \n", *arr3)
}
要理解这个关系很简单,把这段代码画个底层结构图就明白了:
arr2获得的是arr的数据副本,也就是说赋值方式是复制了原数组的底层数据;
而arr3获得的是arr地址的副本,即引用赋值的方式复制的是地址,这个地址指向的还是原来的数据。
所以也就出现了,当arr中原数据被修改,直接赋值而来的数组arr2不受影响,而引用赋值获得的数组arr3也跟着改变了。
另外如果你操作的是切片,那么还真有个内置的方法可以完成复制。
func main() {
arr2 := []int{1, 2, 3}
arr3 := []int{4,5,6}
fmt.Printf("复制前的数组:%v \n", arr2)
copy(arr2, arr3)
fmt.Printf("复制后的数组:%v \n", arr2)
}
通过copy函数,将底层数据进行了复制替换,所以新的切片也不会受原切片的影响。
针对复制拷贝总结如下:
如果复制数组,可以直接通过赋值进行复制;
如果复制切片,可以直接使用copy();
有趣有料有温度,和我一起学技术!
欢迎关注公众号 来思Go,收看更多赖思与甜甜的技术学习日常。
本文标题为:漫画Go语言数组或切片的复制


- R语言绘图数据可视化pie chart饼图 2022-12-10
- Ruby的字符串与数组求最大值的相关问题讨论 2023-07-22
- R语言关于二项分布知识点总结 2022-11-30
- Golang http.Client设置超时 2023-09-05
- Ruby 迭代器知识汇总 2023-07-23
- 汇编语言程序设计之根据输入改变屏幕颜色的代码 2023-07-06
- Ruby on Rails在Ping ++ 平台实现支付 2023-07-22
- Swift超详细讲解指针 2023-07-08
- R语言-如何切换科学计数法和更换小数点位数 2022-11-23
- Go Web开发进阶实战(gin框架) 2023-09-06