我创建了以下界面:
type cloneable interface {
clone() cloneable
}
还有一个person
结构(实现cloneable
):
type person struct {
firstName string
lastName string
age int
}
func (p person) clone() person {
return person{p.firstName, p.lastName, p.age}
}
现在我尝试像这样克隆我的个人值(value):
p1 := person{"name", "last", 22}
p2 := p1.clone()
fmt.Println(p2 == p1) // PRINTS 'true', why?
clone 方法按预期工作,但为什么 p2 等于 p1?这些都是值,而不是引用,它们怎么可能相等?
最佳答案
如果两个结构体的所有字段类型都可比较
并且所有对应的字段值相等
,则两个结构体相等。
如果您的结构体至少有一个函数
或一个不可比较的值,那么您无法比较两个结构体
关于go - 为什么克隆的结构体值仍然等于原始结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64412394/