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

mog*_*lol 4 go

阅读规范后,我得到了:

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

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

Elw*_*nar 6

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

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

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