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

时间:2020-10-18 10:48:18

标签: go reference pass-by-value

我创建了以下界面:

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?这些都是值,不是引用,它们如何相等?

2 个答案:

答案 0 :(得分:2)

如果首先使用两个结构,它们的所有字段类型均为comparable,并且所有对应的字段值均为equal

如果您的结构至少具有一个function或一个不可比的值,那么您将无法比较两个结构

答案 1 :(得分:0)

来自The Go Programming Language Specification

相等运算符 == != 适用于可比较的操作数。 ... 这些术语和比较结果的定义如下:??

The Go Programming Language Specification: Comparison operators

相关问题