在GO中,基元类型和只包含基元类型的 struct 是按值复制的,因此您只需将其赋给一个新变量(或从函数返回)即可复制它们.例如:

type Person struct{
  Name string
  Age  int
}

alice1 := Person{"Alice", 30}
alice2 := alice1
fmt.Println(alice1 == alice2)   // => true, they have the same field values
fmt.Println(&alice1 == &alice2) // => false, they have different addresses

alice2.Age += 10
fmt.Println(alice1 == alice2)   // => false, now they have different field values

注意,正如 comments 者所提到的,您示例中的念力很可能是由于您正在使用的测试库的语义造成的.

如果 struct 碰巧包含数组、切片或指针,则需要对引用的对象执行深度复制,除非希望在副本之间保留引用.Golang不提供内置的深度复制功能,因此您必须实现自己的功能,或者使用许多免费提供的库中的一个.