Основы синтаксиса Строки и руны Массивы и слайсы Map Структуры и методы Интерфейсы Горутины и конкурентность Каналы defer, panic, recover Обработка ошибок Указатели Пакет sync Тестирование Пакеты и модули Стандартная библиотека Context Generics iota и перечисления Разное / продвинутое

Структуры и методы

7 вопросов

Структуры - основной способ организации данных в Go. Методы с value и pointer receiver, встраивание (embedding) вместо наследования, теги полей для JSON и других форматов.

1 Можно ли в Go наследовать структуры? 🟡 Средний
Ответ: B) Нет, но есть встраивание (embedding)

В Go нет наследования. Вместо этого есть композиция через встраивание (embedding): type Dog struct { Animal }. Методы встроенного типа «продвигаются» и доступны напрямую, но это не наследование - нет полиморфизма через базовый тип.

Подробнее →
2 Чем отличается метод с pointer receiver от value receiver? 🟡 Средний
Ответ: B) Pointer receiver может изменять структуру

Value receiver (func (s MyStruct) Method()) получает копию - изменения не сохранятся. Pointer receiver (func (s *MyStruct) Method()) получает указатель - может менять поля оригинала. Также pointer receiver эффективнее для больших структур.

Подробнее →
3 Что такое embedding (встраивание) в Go? 🟡 Средний
Ответ: B) Включение типа без имени поля

Встраивание - объявление типа внутри структуры без имени поля: type Manager struct { Employee }. Все поля и методы Employee доступны напрямую через Manager. Это композиция, не наследование.

Подробнее →
4 Можно ли сравнивать структуры оператором ==? 🟡 Средний
Ответ: B) Только если все поля сравнимы

Структуры сравнимы, если все их поля сравнимы. Если структура содержит слайс, map или функцию - сравнение через == невозможно (ошибка компиляции). Структура из int, string, bool - сравнима.

Подробнее →
5 Какой zero value у поля Name string в новой структуре? 🟢 Лёгкий
Ответ: B) ""

При создании структуры без инициализации (User{} или var u User) все поля получают zero value своего типа. Для string это "". Для int - 0, для *T - nil.

Подробнее →
6 Как экспортировать поле структуры? 🟢 Лёгкий
Ответ: B) Названием с заглавной буквы

В Go видимость определяется регистром первой буквы. Name - экспортировано (доступно из других пакетов), name - приватное. Это касается полей, методов, функций, типов, констант и переменных.

Подробнее →
7 Что делает тег json:"name,omitempty" у поля структуры? 🟡 Средний
Ответ: B) Задаёт имя в JSON и пропускает пустые значения

Теги - метаданные, доступные через рефлексию. json:"name" задаёт имя поля при сериализации/десериализации JSON. omitempty - пропускает поле, если оно имеет zero value (0, "", nil, false).

Подробнее →