go中的相等运算符和deepEquals有什么区别?

时间:2016-03-16 18:05:02

标签: go

阅读the spec后,我得到了:

  

如果所有字段都具有可比性,则结构值具有可比性。如果相应的非空白字段相等,则两个struct值相等。

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

1 个答案:

答案 0 :(得分:5)

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

golang作者的决定是与==运算符进行严格比较,并为那些想要比较其切片内容的人提供reflect.DeepEqual方法。< / p>

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