【问题标题】:What is the difference between the equality operator and deepEquals in go?go中的相等运算符和deepEquals有什么区别?
【发布时间】:2016-03-17 02:10:47
【问题描述】:

看完the spec,我有:

如果结构值的所有字段都是可比较的,则结构值是可比较的。如果它们对应的非空白字段相等,则两个结构值相等。

这对我来说意味着structA == structB 意味着结构中每个非空白字段的值都将应用fieldA == fieldB。那么为什么我们需要一个深度相等的概念呢?因为如果结构具有也是结构的字段,所提供的信息对我来说意味着将使用== 检查这些字段是否相等,所以这肯定会触发对象图的遍历?

【问题讨论】:

    标签: go


    【解决方案1】:

    您缺少的是指针。在指针上执行== 时,您应该检查指针值(两个内存地址)还是指向的值(两个变量)?在比较切片或映射时(两者都可以同化为由指针组成的结构)?

    golang 的作者的决定是对 == 运算符进行严格的比较,并为想要比较切片内容的人提供 reflect.DeepEqual 方法。

    我个人在测试中大量使用reflect.DeepEquals,因为函数的输出值可能是一个指针,但我真正想比较的是输出值的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 2013-07-27
      • 1970-01-01
      • 2022-06-10
      • 2023-03-15
      • 1970-01-01
      • 2018-08-16
      相关资源
      最近更新 更多