19 тем · 146 вопросов
Все вопросы из нашего квиза по Go с правильными ответами и подробными пояснениями. Используйте как шпаргалку после прохождения квиза или для подготовки к собеседованию. Материал охватывает 19 тем: от базового синтаксиса до горутин, каналов и generics.
Фундамент языка Go: типы данных, переменные, константы, операторы и zero values. Эти знания необходимы для написания любой программы на Go и часто встречаются на собеседованиях.
Строки в Go — это неизменяемые последовательности байт в UTF-8. Понимание разницы между byte и rune критически важно для корректной работы с Unicode и кириллицей.
Слайсы — основная структура данных для работы с коллекциями в Go. Важно понимать их внутреннее устройство (указатель + длина + ёмкость) и отличие от массивов.
Map в Go — встроенная хеш-таблица для хранения пар ключ-значение. Ключевые особенности: отсутствие гарантированного порядка, panic при записи в nil map, ограничения на типы ключей.
Структуры — основной способ организации данных в Go. Методы с value и pointer receiver, встраивание (embedding) вместо наследования, теги полей для JSON и других форматов.
Интерфейсы в Go реализуются неявно (duck typing). Пустой интерфейс interface{} (any), type assertion, type switch и тонкости с nil-интерфейсами — частые темы собеседований.
Горутины — легковесные потоки, управляемые рантаймом Go. Конкурентность — ключевая сила языка. Важно понимать data race, GOMAXPROCS и утечки горутин.
Каналы — основной механизм коммуникации между горутинами в Go. Буферизованные и небуферизованные, однонаправленные, select, закрытие каналов и типичные паттерны использования.
Механизмы управления потоком выполнения: defer откладывает вызов до конца функции, panic вызывает аварийное завершение, recover перехватывает панику. Порядок выполнения defer — LIFO.
Go использует явную обработку ошибок через возвращаемые значения вместо исключений. errors.Is, errors.As, оборачивание через %w — ключевые инструменты работы с ошибками.
Указатели в Go позволяют передавать данные по ссылке. В отличие от C, арифметика указателей запрещена. Операторы & (взятие адреса) и * (разыменование) — базовые конструкции.
Пакет sync предоставляет примитивы синхронизации: Mutex, RWMutex, WaitGroup, Once, Pool. Необходимы для безопасной работы с общими данными из нескольких горутин.
Встроенная система тестирования Go: пакет testing, файлы _test.go, бенчмарки, параллельные тесты. Всё работает из коробки без внешних фреймворков.
Система модулей Go: go.mod, go.sum, go mod tidy, vendor. Функция init(), экспорт через заглавную букву, организация кода в пакеты.
Богатая стандартная библиотека Go: net/http для веб-серверов, encoding/json для JSON, fmt для форматирования, io для потоков, time для работы с временем.
context.Context — механизм для передачи дедлайнов, сигналов отмены и request-scoped данных. Всегда передаётся первым аргументом функции по конвенции Go.
Generics (параметрический полиморфизм) добавлены в Go 1.18. Квадратные скобки для параметров типа, constraints (any, comparable), type sets для ограничения типов.
iota — встроенный счётчик для создания перечислений в блоках const. Начинается с 0, увеличивается на 1 для каждой строки. Сбрасывается в новом блоке const.
Продвинутые темы Go: go vet, go fmt, go:embed, сборщик мусора, рефлексия, unsafe.Pointer, variadic функции, замыкания и другие особенности языка.