阅读the spec后,我得到了:
如果所有字段都具有可比性,则结构值具有可比性。如果相应的非空白字段相等,则两个struct值相等。
这对我来说意味着执行structA == structB
意味着结构中每个非空字段的值都会应用fieldA == fieldB
。那么为什么我们需要一个深度平等的概念呢?因为如果结构具有也是结构的字段,所提供的信息意味着我也会使用==
检查那些字段是否相等,所以肯定会触发对象图的遍历?
答案 0 :(得分:5)
你缺少的是指针。在指针上执行==
时,您应该检查指针值(两个内存地址)还是指向的值(两个vars)?当比较切片或贴图(两者都可以被同化为由指针构成的结构)时?
golang作者的决定是与==
运算符进行严格比较,并为那些想要比较其切片内容的人提供reflect.DeepEqual
方法。< / p>
我个人在测试中广泛使用reflect.DeepEquals
,因为函数的输出值可能是指针,但是我真的想要比较的是输出值的内容。