据我了解,您想要的是:
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface()}在谈论接口和时
nil,人们总是对两个截然不同且无关的事物感到困惑:
- 甲
nil
接口值,其是不具有一个接口值 的基础值 。这是接口类型的零值。 - 非
nil
接口值(即,它具有 基础值 ),但是其基础值是其基础类型的零值。例如,基础值是nil
映射,nil
指针或0数字等。
据我了解,您正在询问第二件事。
更新 :由于上面的代码的使用
==,它对于不可 比较的
类型无效。我相信,使用
reflect.DeepEqual()代替将使它适用于所有类型:
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface())}


