Мне нужна общая функция для проверки того, что-то равно ее нулевому значению или нет.Как использовать функцию reflection.DeepEqual() для сравнения значения указателя с нулевым значением его типа?
Из этого question я смог найти функцию, которая работала с типами значений. Я изменил его поддержку указатели:
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())
}
Unfotunately, это не работает для меня, когда делает что-то вроде этого:
type myStruct struct{}
isZeroOfUnderlyingType(myStruct{}) //Returns true (works)
isZeroOfUnderlyingType(&myStruct{}) //Returns false (doesn't) work
Это потому, что &myStruct{}
является указателем, и нет никакого способа разыменования interface{}
внутри функции. Как сравнить значение этого указателя с нулевым значением его типа?
Вы должны принять свой собственный ответ. – kostix