本文主要是来聊一聊关于 Golang 中的深度比较 DeepEqual
因为最近发现身边的小伙伴写 2 个或者多个 map 比较的时候,都是自己去实现去比较每一个结构,每一个节点的 key 和 value 是不是都相等,且根据不同的数据结构,都要去实现一遍,没有必要自己造轮子
我们知道,对于布尔类型,整形的,浮点类型,复数,指针,字符串类型的值可以直接使用 ==
来进行比较,确认双方是否相等
甚至对于 channel 类型,也是可以使用 ==
来进行比较是否相等的
那么对于 golang 中的 切片 slice,数组 array,map,interface{},struct 结构体我们如何去进行比较呢?显然使用 ==
是不行的,此处的 m1 和 m2 是 map[string]int
此处你是否可能会想到 C++ 还可以去重载操作符,咱们实现一下对应数据类型的操作符就可以了,妥妥的
你是否还会想到 PHP 中的 ===
可以直接去比较数据的值和数据的类型,称为全等比较运算符
那么,看到此处,是否可以猜测 golang 的做法也是类似的呢?
实际上 golang 去比较两个对象是否相同,也是通过去比较数据的类型,数据的值,数据的长度等等维度来进行确认的
C++ 是需要我们自己编码实现,PHP 是直接提供 ===
,Golang 是给我们在反射包中提供一个 DeepEqual 函数来进行灵活使用
DeepEqual 案例
func DeepEqual(