我需要一个通用函数来检查某项是否等于其零值。
通过这个问题,我能够找到一个适用于值类型的函数。我修改了它以支持指针:
func isZeroOfUnderlyingType(x interface{}) bool { rawType := reflect.TypeOf(x) //source is a pointer, convert to its value if rawType.Kind() == reflect.Ptr { rawType = rawType.Elem() } return reflect.DeepEqual(x, reflect.Zero(rawType).Interface()) }
不幸的是,当执行以下操作时,这对我不起作用:
type myStruct struct{} isZeroOfUnderlyingType(myStruct{}) //Returns true (works) isZeroOfUnderlyingType(&myStruct{}) //Returns false (doesn't) work
这是因为&myStruct{}
是指针,并且无法取消引用interface{}
函数内部的方式。如何将指针的值与其类型的零值进行比较?