是否可以为命名类型/结构定义相等性?

在阅读了有关在地图中使用切片的相关问题后,我对 Go 中的平等感到好奇。

我知道可以覆盖equalsJava的方法Object。是否有类似的方法来定义 Go 如何检查用户定义的类型/结构是否相等?如果是这样,上面提到的问题将有一个解决方法。我认为使用interface{}值可能会提供解决方案,但我收到了错误消息panic: runtime error: hash of unhashable type []int


杨魅力
浏览 260回答 3
3回答

手掌心

不,这不是用户可定义的。Go 有严格的规则,什么算作相等,甚至什么是可比较的,它本身是基于可分配性的。查看规范的比较运算符部分。

慕桂英546537

Go 语言本身还没有标准(go 1.13)。但是,比较实用程序可以提供自己的方式来支持它。函数cmp.Equal(来自google/go-cmp/cmp)通过定义 Equal 方法支持自定义类型比较器的定义:• 如果值具有形式为的 Equal 方法"(T) Equal(T) bool"或"(T) Equal(I) bool"whereT可分配给I,则使用x.Equal(y)even ifx或y为 nil 的结果。否则,不存在这样的方法,评估继续下一个规则。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go