Вопросы и ответы из квиза по Go

19 тем · 146 вопросов

Все вопросы из нашего квиза по Go с правильными ответами и подробными пояснениями. Используйте как шпаргалку после прохождения квиза или для подготовки к собеседованию. Материал охватывает 19 тем: от базового синтаксиса до горутин, каналов и generics.

Основы синтаксиса 15 вопр.

Фундамент языка Go: типы данных, переменные, константы, операторы и zero values. Эти знания необходимы для написания любой программы на Go и часто встречаются на собеседованиях.

Строки и руны 8 вопр.

Строки в Go — это неизменяемые последовательности байт в UTF-8. Понимание разницы между byte и rune критически важно для корректной работы с Unicode и кириллицей.

Массивы и слайсы 10 вопр.

Слайсы — основная структура данных для работы с коллекциями в Go. Важно понимать их внутреннее устройство (указатель + длина + ёмкость) и отличие от массивов.

Map 7 вопр.

Map в Go — встроенная хеш-таблица для хранения пар ключ-значение. Ключевые особенности: отсутствие гарантированного порядка, panic при записи в nil map, ограничения на типы ключей.

Структуры и методы 7 вопр.

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

Интерфейсы 8 вопр.

Интерфейсы в Go реализуются неявно (duck typing). Пустой интерфейс interface{} (any), type assertion, type switch и тонкости с nil-интерфейсами — частые темы собеседований.

Горутины и конкурентность 7 вопр.

Горутины — легковесные потоки, управляемые рантаймом Go. Конкурентность — ключевая сила языка. Важно понимать data race, GOMAXPROCS и утечки горутин.

Каналы 8 вопр.

Каналы — основной механизм коммуникации между горутинами в Go. Буферизованные и небуферизованные, однонаправленные, select, закрытие каналов и типичные паттерны использования.

defer, panic, recover 6 вопр.

Механизмы управления потоком выполнения: defer откладывает вызов до конца функции, panic вызывает аварийное завершение, recover перехватывает панику. Порядок выполнения defer — LIFO.

Обработка ошибок 6 вопр.

Go использует явную обработку ошибок через возвращаемые значения вместо исключений. errors.Is, errors.As, оборачивание через %w — ключевые инструменты работы с ошибками.

Указатели 4 вопр.

Указатели в Go позволяют передавать данные по ссылке. В отличие от C, арифметика указателей запрещена. Операторы & (взятие адреса) и * (разыменование) — базовые конструкции.

Пакет sync 5 вопр.

Пакет sync предоставляет примитивы синхронизации: Mutex, RWMutex, WaitGroup, Once, Pool. Необходимы для безопасной работы с общими данными из нескольких горутин.

Тестирование 6 вопр.

Встроенная система тестирования Go: пакет testing, файлы _test.go, бенчмарки, параллельные тесты. Всё работает из коробки без внешних фреймворков.

Пакеты и модули 6 вопр.

Система модулей Go: go.mod, go.sum, go mod tidy, vendor. Функция init(), экспорт через заглавную букву, организация кода в пакеты.

Стандартная библиотека 7 вопр.

Богатая стандартная библиотека Go: net/http для веб-серверов, encoding/json для JSON, fmt для форматирования, io для потоков, time для работы с временем.

Context 4 вопр.

context.Context — механизм для передачи дедлайнов, сигналов отмены и request-scoped данных. Всегда передаётся первым аргументом функции по конвенции Go.

Generics 4 вопр.

Generics (параметрический полиморфизм) добавлены в Go 1.18. Квадратные скобки для параметров типа, constraints (any, comparable), type sets для ограничения типов.

iota и перечисления 3 вопр.

iota — встроенный счётчик для создания перечислений в блоках const. Начинается с 0, увеличивается на 1 для каждой строки. Сбрасывается в новом блоке const.

Разное / продвинутое 25 вопр.

Продвинутые темы Go: go vet, go fmt, go:embed, сборщик мусора, рефлексия, unsafe.Pointer, variadic функции, замыкания и другие особенности языка.

Проходите квиз в Telegram — открыть бота