golang reflect.DeepEqual深等价比较引用数据类型是否相等
- https://studygolang.com/pkgdoc
reflect.DeepEqual
对于array、slice、map、struct等类型,当比较两个值是否相等时,是不能使用==运算符的。
func DeepEqual(x, y interface{}) bool- 深度比较,反馈两个对象是否深等价。
- 用来判断两个值是否深度一致
- 使用
reflect.DeepEqual来比较两个slice、struct、map是否相等
基本类型值等比较会使用==,当比较array、slice的成员、map映射的键值对、struct结构体的字段时,需要进行深入比对,比如map的键值对,对键只使用==,但值会继续往深层比对。
深等价
-
x和y同nil或同non-nil -
x和y具有相同的长度 -
x和y指向同一个底层数组所初始化的实体对象
&x[0] == &y[0]注意
- 一个
non-nil的空切片和一个nil的切片并不是深等价的,比如[]byte{}和[]byte{nil}是非等价的。 -
numbers、bools、strings、channels使用==相等则是深等价的
func TestSlice(t *testing.T) {
m1 := map[string]int{"id": 1, "pid": 0}
m2 := map[string]int{"pid": 0, "id": 1}
//t.Log(m1 == m2)//invalid operation: m1 == m2 (map can only be compared to nil)
//map变量只能和空(nil)比较
//t.Log(m1 == nil) //false
//t.Log(m2 != nil) //true
t.Log(reflect.DeepEqual(m1, m2)) //true
}参考链接:https://www.jianshu.com/p/50380740d04a










