Go reflect.DeepEqual

reflect.DeepEqual

对于arrayslicemapstruct等类型,当比较两个值是否相等时,是不能使用==运算符的。

func DeepEqual(x, y interface{}) bool
  • 深度比较,反馈两个对象是否深等价。
  • 用来判断两个值是否深度一致
  • 使用reflect.DeepEqual来比较两个slicestructmap是否相等

基本类型值等比较会使用==,当比较arrayslice的成员、map映射的键值对、struct结构体的字段时,需要进行深入比对,比如map的键值对,对键只使用==,但值会继续往深层比对。

深等价

  • xynil或同non-nil
  • xy具有相同的长度
  • xy指向同一个底层数组所初始化的实体对象
&x[0] == &y[0]

注意

  • 一个non-nil的空切片和一个nil的切片并不是深等价的,比如[]byte{}[]byte{nil}是非等价的。
  • numbersboolsstringschannels使用==相等则是深等价的
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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值