如何解决为什么克隆的结构值仍等于原始结构
我创建了以下界面:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。