7 вопросов
Структуры - основной способ организации данных в Go. Методы с value и pointer receiver, встраивание (embedding) вместо наследования, теги полей для JSON и других форматов.
В Go нет наследования. Вместо этого есть композиция через встраивание (embedding): type Dog struct { Animal }. Методы встроенного типа «продвигаются» и доступны напрямую, но это не наследование - нет полиморфизма через базовый тип.
Подробнее →Value receiver (func (s MyStruct) Method()) получает копию - изменения не сохранятся. Pointer receiver (func (s *MyStruct) Method()) получает указатель - может менять поля оригинала. Также pointer receiver эффективнее для больших структур.
Подробнее →Встраивание - объявление типа внутри структуры без имени поля: type Manager struct { Employee }. Все поля и методы Employee доступны напрямую через Manager. Это композиция, не наследование.
Подробнее →==? 🟡 Средний
▶
Структуры сравнимы, если все их поля сравнимы. Если структура содержит слайс, map или функцию - сравнение через == невозможно (ошибка компиляции). Структура из int, string, bool - сравнима.
Подробнее →Name string в новой структуре? 🟢 Лёгкий
▶
При создании структуры без инициализации (User{} или var u User) все поля получают zero value своего типа. Для string это "". Для int - 0, для *T - nil.
Подробнее →В Go видимость определяется регистром первой буквы. Name - экспортировано (доступно из других пакетов), name - приватное. Это касается полей, методов, функций, типов, констант и переменных.
Подробнее →json:"name,omitempty" у поля структуры? 🟡 Средний
▶
Теги - метаданные, доступные через рефлексию. json:"name" задаёт имя поля при сериализации/десериализации JSON. omitempty - пропускает поле, если оно имеет zero value (0, "", nil, false).
Подробнее →