ThunderCat是正确的,但是如果你有更复杂的结构,你可能会遇到问题。例如 带切片的struct 。
检查可用的许多深拷贝库中的一个,但请确保您选择的库适合您。您可以 检查一下 ,这是一个用法:
package main import ( "fmt" "github.com/mohae" ) type T struct { Items []int } func main() { v0, v1, v2, v3 := T{[]int{1, 1, 1}}, T{[]int{1, 1, 1}}, T{[]int{1, 1, 1}}, T{[]int{1, 1, 1}} s := []*T{&v0, &v1, &v2, &v3, nil} c := deepcopy.Copy(s).([]*T) //modifying original s[0].Items[0] = 999 fmt.Println(s) fmt.Println(c) for _, v := range c { if v == nil { fmt.Println("nil") } else { fmt.Println(*v) } } }
使用以下代码复制值:
c := make([]*T, len(s)) for i, p := range s { if p == nil { // Skip to next for nil source pointer continue } // Create shallow copy of source element v := *p // Assign address of copy to destination. c[i] = &v }
在操场上跑吧 。
此代码创建值的浅表副本。根据应用程序要求,您可能希望深度复制值,或者如果是结构类型,则需要一个或多个字段。具体情况取决于实际类型T和应用要求。