go - 为什么克隆的结构体值仍然等于原始结构体

标签 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}
}

现在我尝试像这样克隆我的个人值(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/

相关文章:

go - 检查给定路径是否是 golang 中另一个路径的子目录

c++ - move 语义与常量引用

c++ - 依赖项、命名空间和 header

c++ - 一个什么都不做的函数可以改变一个对象吗?

excel - ByVal 是谎言吗?

python - Golang - 打包和散列二进制数据

javascript - Go 中的快速排序实现

string - 附加来自 GO MAP 的关键数据

c++ - 引用构造函数

java - 当 Java ArrayList 作为参数传递给返回 void 的函数并在函数中修改时,如何修改?可能会对按值传递感到困惑