go 深浅拷贝

小兵 · · 2706 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import "fmt"

func main() {
    /*
        深浅拷贝:
            深拷贝:拷贝数据的副本,对原始数据没有影响
               值类型的数据,默认都是深拷贝
               int , float,string,bool,array,struct
            浅拷贝:拷贝的是数据的地址,
                  引用类型的数据,默认都是浅拷贝
                    slice,map,function
    */
    // slice,map 不需要手动添加&去取地址。
    map1 := make(map[int]string)
    fmt.Println(map1)
    map1[1] = "aaa"
    map1[2] = "bbb"
    fmt.Println(map1)
    fmt.Printf("%p\n", map1)

    //1.深拷贝
    a := 10
    b := a //深拷
    fmt.Println(a, b)
    b = 20
    fmt.Println(a, b)

    //2.数组的深拷
    arr1 := [4]int{1, 2, 3, 4}
    arr2 := arr1
    fmt.Println(arr1, arr2)
    arr2[0] = 100
    fmt.Println(arr1, arr2)

    //数组的浅拷贝
    arr3 := &arr1
    //(*arr3)[0] = 100 // 理论写法
    arr3[0] = 100 //go优化写法,语法糖
    fmt.Println(arr1, arr3)

    //3 引用类型默认就是浅拷贝
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:小兵

查看原文:go 深浅拷贝

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2706 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传