2014-10-13 4 views
0

У меня есть структура с большим количеством полей, и я должен проверить, является ли какое-либо из этих полей нулевым, без ввода каждого имени поля вручную. Тип поля всегда является указателем, поэтому я могу проверить, не беспокоясь о нулевых значениях.Сравнение значений указателя с использованием пакета отражения

Я пытаюсь сделать это с помощью пакета отражения, но он, похоже, не работает должным образом, и я не могу понять, почему.

Вот площадка тиражирование моей проблемы:
http://play.golang.org/p/LOb6a8eklE

Как вы можете видеть, если я могу проверить вручную все работает отлично. Когда его просят распечатать, он также печатает нуль, но при сравнении он оценивается как false.

Любые мысли о том, что происходит?

Моя основная догадка заключается в том, что обратный тип интерфейса(), очевидно, является интерфейсом {}, и, сохраняя в нем «нуль», он больше не делает его «нулевым». В любом случае?

Спасибо!

ответ

0

Используйте IsNil(), чтобы определить, является ли указатель нулевым.

playground

Выражение v.Interface() == nil всегда ложно, потому что интерфейс() возвращает значение с помощью ассоциированного типа.

См. nil error FAQ для получения дополнительной информации по этой теме.

Смежные вопросы