go-深浅拷贝

7次阅读

共计 543 个字符,预计需要花费 2 分钟才能阅读完成。

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 引用类型默认就是浅拷贝
}
正文完
 0