Pull to refresh

Comments 10

Хорошо, получить типы — прикольно. Но остальное? Для чего всё это нужно рядовому разработчику, который не хочет экзерсисов? Я у себя в голове не смог это, к сожалению, уложить всё. Ну, да, есть пара прикольных методов. Но что с ними делать?

Парсеры, сериалайзеры, валидаторы и кастомные метаданные к структурам

Как заметил rustler2000, удобно иметь дело со слабоструктурироваными данными. Стандартный парсер json полностью работает на интерфейсах. (Хотя сгенерированный код easyjson работает в 5 раз быстрее, он не переживёт изменение структуры сообщения.)
Интерфейсы очень полезны для статического анализа. Удобно писать с полным автодополнением: если метод не высвечивается после точки, то его нет, и надо искать ошибку выше. Шаблоны С++ не полностью анализируемы, их не всегда с первого раза удаётся скомпилировать.

В стандартной библиотеке эти фишки reflect используется для обработки структурных тегов например. А это парсинг JSON и работа с любыми БД.

> и хотя во время выполнения значение, хранящееся в переменной интерфейса, может изменять тип, это значение всегда будет удовлетворять интерфейсу. (Никаких undefined, NaN и прочих ломающих логику программы вещей.)

Во-первых, переводчик улучшил Пайка, добавив предложение в скобках. :-) Во-вторых, переменная интерфейсного типа может хранить nil — значение не удовлетворяющее интерфейсу и ломающее логику.
Потому что в GO это не вызов метода объекта, а вызов функции с передачей структуры в качестве параметра завуалированное синтаксическим сахаром
Хорошая статья, интересно было почитать! Спасибо автору и переводчику!
Вот только сегодня проходил эту тему в учебнике D&K, но с ходу ничего не понял (буду перечитывать).

Чтобы понять, достаточно посмотреть на исходный код reflect. В целом суть в том, что на исходное значение создаётся структура с unsafe pointer, и дальше идет работа с ней.

Sign up to leave a comment.

Articles