3 回答
TA贡献1111条经验 获得超0个赞
我提供了Go 编程语言规范中的以下内容
相等运算符 == 和 != 适用于可比较的操作数。
关于interface{}
s 和structs
:
接口值具有可比性。如果两个接口值具有相同的动态类型和相等的动态值,或者两者的值为 nil,则它们相等。
当类型 X 的值具有可比性且 X 实现 T 时,非接口类型 X 的值 x 和接口类型 T 的值 t 具有可比性。如果 t 的动态类型与 X 相同且 t 的动态值等于 x,则它们相等.
如果所有字段都具有可比性,则结构值具有可比性。如果它们对应的非空白字段相等,则两个结构值相等。
你也可以试试这个playground https://play.golang.org/p/bgO1_V87v9k
换句话说,在 Go 中处理相等似乎很容易!
TA贡献1793条经验 获得超6个赞
更新:自从写了上述问题和答案后,Go 语言略有变化。
以前,如果比较两个接口并且其中一个或两个接口包含不可比较的类型,则运行时会发生混乱。现在,只有当它们都包含相同的不可比较类型时,运行时才会恐慌。(如果它们包含不同的类型,那么即使任一类型是不可比较的,结果现在也是假的。)
什么是不可比较的类型?基本上,它们是切片、映射、函数以及使用它们的任何结构或数组类型。
AFAIK 这是围绕 Go 1.9 或 1.10 的无声变化。
TA贡献1815条经验 获得超6个赞
我总结了 Go 类型的属性
解释
depends
- 仅当包含的类型可比较时才允许。)对于接口类型,代码将编译,但如果在运行时包含的类型不可比较,则运行时将发生恐慌。感谢@Andrew W. Phillips。
- 3 回答
- 0 关注
- 111 浏览
添加回答
举报