为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨魅力 2021-07-06 21:42:12
在阅读了有关在地图中使用切片的相关问题后,我对 Go 中的平等感到好奇。我知道可以覆盖equalsJava的方法Object。是否有类似的方法来定义 Go 如何检查用户定义的类型/结构是否相等?如果是这样,上面提到的问题将有一个解决方法。我认为使用interface{}值可能会提供解决方案,但我收到了错误消息panic: runtime error: hash of unhashable type []int。
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-07-12
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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 ifxy为 nil 的结果。否则,不存在这样的方法,评估继续下一个规则。


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号