微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么克隆的结构值仍等于原始结构

如何解决为什么克隆的结构值仍等于原始结构

我创建了以下界面:

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 举报,一经查实,本站将立刻删除。