Golang中深拷贝与浅拷贝怎么使用

avatar
作者
筋斗云
阅读量:0

在Golang中,深拷贝和浅拷贝是指在复制一个对象时,是否会复制其引用类型的数据。下面是深拷贝和浅拷贝的使用方法:

浅拷贝: 浅拷贝是指仅拷贝对象的值,而不复制引用类型的数据。在Golang中,可以使用赋值操作符 = 或者 copy 函数来进行浅拷贝。

示例代码:

package main  import ( 	"fmt" )  type Person struct { 	Name string 	Age  int }  func main() { 	// 创建一个Person对象 	p1 := Person{Name: "Alice", Age: 20}  	// 使用赋值操作符进行浅拷贝 	p2 := p1  	// 修改p2的Name属性 	p2.Name = "Bob"  	// 打印p1和p2的Name属性 	fmt.Println(p1.Name) // 输出:Alice 	fmt.Println(p2.Name) // 输出:Bob } 

深拷贝: 深拷贝是指在复制对象时,会将引用类型的数据也进行复制。在Golang中,可以使用 json.Marshaljson.Unmarshal 函数来进行深拷贝。

示例代码:

package main  import ( 	"encoding/json" 	"fmt" )  type Person struct { 	Name string 	Age  int }  func main() { 	// 创建一个Person对象 	p1 := Person{Name: "Alice", Age: 20}  	// 使用json.Marshal和json.Unmarshal进行深拷贝 	data, _ := json.Marshal(p1) 	var p2 Person 	json.Unmarshal(data, &p2)  	// 修改p2的Name属性 	p2.Name = "Bob"  	// 打印p1和p2的Name属性 	fmt.Println(p1.Name) // 输出:Alice 	fmt.Println(p2.Name) // 输出:Bob } 

需要注意的是,进行深拷贝时,对象的成员变量必须是可导出的(即首字母大写),否则无法正常进行深拷贝。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!