您传递给的所有内容都
reflect.DeepEqual()包装在一个
interface{}值中(如果还没有的话):func DeepEqual(x, y interface{}) boolinterface{}将比较值,其中第一个参数值 不是nil,仅包装在其中的值。
接口值表示为一
(type; value)对。您传递给的第一个值
reflect.DeepEqual()是一对
(type;value)存在
(*Obj, nil),第二个值是
nil。他们不平等。第二个值缺少类型信息。
如果将其与“类型化”进行比较
nil,则将为
true:
reflect.DeepEqual(c.O, (*Obj)(nil)) // This is true
请参阅以下示例:
fmt.Println("c.O:", c.O)fmt.Println("c.O == nil:", c.O == nil)fmt.Println("c.O deep equal to nil:", reflect.DeepEqual(c.O, nil))fmt.Println("c.O deep equal to (*Obj)(nil):", reflect.DeepEqual(c.O, (*Obj)(nil)))输出(在Go Playground上尝试):
c.O: <nil>c.O == nil: truec.O deep equal to nil: falsec.O deep equal to (*Obj)(nil): true
请参阅以下问题以获得更深入的了解:
隐藏nil值,了解golang为什么会失败
如果要检查包装在非
nil接口中的值是否为
nil,则可以使用反射:reflect.Value.IsNil()。



