golang struct深拷贝
时间: 2023-07-19 18:56:59 浏览: 140
在 Golang 中,如果要对一个结构体进行深拷贝,可以使用 `json.Marshal` 和 `json.Unmarshal` 方法来实现。具体步骤如下:
1. 将原始结构体序列化成 JSON 字符串,使用 `json.Marshal` 方法实现。
2. 将 JSON 字符串反序列化成新的结构体,使用 `json.Unmarshal` 方法实现。
这样就可以得到一个新的结构体,它包含了原始结构体所有的属性和方法。
以下是示例代码:
```go
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
}
func main() {
// 原始结构体
p1 := Person{Name: "Tom", Age: 20}
// 将结构体序列化成 JSON 字符串
b, _ := json.Marshal(p1)
// 将 JSON 字符串反序列化成新的结构体
var p2 Person
json.Unmarshal(b, &p2)
// 修改新的结构体的属性
p2.Name = "Jerry"
p2.Age = 30
// 打印原始结构体和新的结构体
fmt.Println("原始结构体:", p1)
fmt.Println("新的结构体:", p2)
}
```
输出结果为:
```
原始结构体: {Tom 20}
新的结构体: {Jerry 30}
```
可以看到,原始结构体和新的结构体是独立的,互不影响。这就是深拷贝的效果。
阅读全文