Комментарии 10
Хорошо, получить типы — прикольно. Но остальное? Для чего всё это нужно рядовому разработчику, который не хочет экзерсисов? Я у себя в голове не смог это, к сожалению, уложить всё. Ну, да, есть пара прикольных методов. Но что с ними делать?
Парсеры, сериалайзеры, валидаторы и кастомные метаданные к структурам
Как заметил rustler2000, удобно иметь дело со слабоструктурироваными данными. Стандартный парсер json полностью работает на интерфейсах. (Хотя сгенерированный код easyjson работает в 5 раз быстрее, он не переживёт изменение структуры сообщения.)
Интерфейсы очень полезны для статического анализа. Удобно писать с полным автодополнением: если метод не высвечивается после точки, то его нет, и надо искать ошибку выше. Шаблоны С++ не полностью анализируемы, их не всегда с первого раза удаётся скомпилировать.
Интерфейсы очень полезны для статического анализа. Удобно писать с полным автодополнением: если метод не высвечивается после точки, то его нет, и надо искать ошибку выше. Шаблоны С++ не полностью анализируемы, их не всегда с первого раза удаётся скомпилировать.
Например писать вот такие штуки
github.com/thedevsaddam/gojsonq
github.com/thedevsaddam/gojsonq
В стандартной библиотеке эти фишки reflect используется для обработки структурных тегов например. А это парсинг JSON и работа с любыми БД.
> и хотя во время выполнения значение, хранящееся в переменной интерфейса, может изменять тип, это значение всегда будет удовлетворять интерфейсу. (Никаких undefined, NaN и прочих ломающих логику программы вещей.)
Во-первых, переводчик улучшил Пайка, добавив предложение в скобках. :-) Во-вторых, переменная интерфейсного типа может хранить nil — значение не удовлетворяющее интерфейсу и ломающее логику.
Во-первых, переводчик улучшил Пайка, добавив предложение в скобках. :-) Во-вторых, переменная интерфейсного типа может хранить nil — значение не удовлетворяющее интерфейсу и ломающее логику.
Хорошая статья, интересно было почитать! Спасибо автору и переводчику!
Вот только сегодня проходил эту тему в учебнике D&K, но с ходу ничего не понял (буду перечитывать).
Вот только сегодня проходил эту тему в учебнике D&K, но с ходу ничего не понял (буду перечитывать).
Чтобы понять, достаточно посмотреть на исходный код reflect. В целом суть в том, что на исходное значение создаётся структура с unsafe pointer, и дальше идет работа с ней.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Законы рефлексии в Gо