【发布时间】:2013-12-17 01:35:38
【问题描述】:
在阅读了 related question 关于在地图中使用切片之后,我开始对 Go 中的相等性感到好奇。
我知道可以覆盖 Java Object 的 equals 方法。是否有类似的方法来定义 Go 如何检查用户定义的类型/结构是否相等?如果是这样,上面提到的问题将有一个解决方法。我认为使用interface{} values 可能会提供解决方案,但我收到了错误消息panic: runtime error: hash of unhashable type []int。
【问题讨论】:
-
据我所知没有。要解决此问题,您可以将对象转换为可散列类型以在键中使用,甚至可以使用数组从头开始实现散列映射。 (顺便说一下,一些可能出乎意料的类型是可散列的:指针和结构,其成员仅为可散列类型。)
-
这是“可比”类型的列表:golang.org/ref/spec#Comparison_operators -- 包括频道,令人惊讶!
-
如果在 2019 年或以后阅读本文,github.com/google/go-cmp/cmp 包中的 Equal 函数看起来像 reflect.DeepEquals,但支持自定义相等函数。