问题描述
我创建了以下界面:
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}
}
现在,我尝试像这样克隆我的人值:
p1 := person{"name","last",22}
p2 := p1.clone()
fmt.Println(p2 == p1) // PRINTS 'true',why?
clone方法按预期工作,但是为什么p2等于p1?这些都是值,不是引用,它们如何相等?
解决方法
如果首先使用两个结构,它们的所有字段类型均为comparable
,并且所有对应的字段值均为equal
。
如果您的结构至少具有一个function
或一个不可比的值,那么您将无法比较两个结构
来自The Go Programming Language Specification
:
相等运算符 == 和!= 适用于可比较的操作数。 ... 这些术语和比较结果的定义如下:??
The Go Programming Language Specification: Comparison operators