Golang的深浅拷贝结构体对象

Golang的深浅拷贝结构体对象

问题描述

当我们以 new 或 & 的形式,创立一个 struct 的对象实例后,如果间接应用赋值运算符,则像其余语言一样,会浅拷贝到一个新对象,二者指向的内存地址是相同的。
 
值类型的数据,默认都是深拷贝
int float string bool array struct
 
引用类型的数据,默认都是浅拷贝
slice map function
 
结构体深拷贝
结构体中都是值类型的字段 :=赋值就是深拷贝
 
 
package main

import (
   "fmt"
)

type Student struct {
   Name string
   Age  uint8
}

func main() {
   // 深拷贝 将 stud1 对象 深拷贝出一个 stud2
   // stud1 和 stud2 指向了两块内存地址 正本
   stud1 := &Student{Name: "stud1", Age: 35}
   // 为 tmp 调配新的内存地址
   tmp := *stud1
   // 将 tmp 的内存地址赋给指针变量 stud2
   stud2 := &tmp
   stud2.Name = "stud2"
   fmt.Printf("%+v\n%+v\n", stud1, stud2)

   // 浅拷贝
   stud3 := &Student{Name: "stud3", Age: 35}
   stud4 := stud3
   stud4.Name = "stud4"
   fmt.Printf("%+v\n%+v\n", stud3, stud4)
}

 

 

 

 

posted @ 2022-04-20 21:11  SoutherLea  阅读(473)  评论(0编辑  收藏  举报