CCareerLab
Главная/База знаний/Собеседование/Собеседование Golang Junior: вопросы и ответы
Собеседование
Новоеjunior

Собеседование Golang Junior: вопросы и ответы

Вопросы на собеседовании Golang Junior с ответами: синтаксис, горутины, каналы, интерфейсы, управление памятью. Подготовьтесь к интервью Go-разработчика.

Время чтения5 минут
Обновленомай 2026 г.
Уровеньjunior
Главная мысль
Вопросы на собеседовании Golang Junior с ответами: синтаксис, горутины, каналы, интерфейсы, управление памятью. Подготовьтесь к интервью Go-разработчика.

Go становится всё более популярным для backend-разработки: быстрый, простой, отличная конкурентность. Вот что спрашивают на собеседовании Golang Junior.

Roadmap Backend-разработчика

Базовый Go (вопросы 1–15)

1. Чем Go отличается от других языков?
Статически типизированный, компилируемый. Нет классов и наследования — только структуры и интерфейсы. Встроенная поддержка конкурентности (горутины, каналы). Быстрая компиляция. Сборщик мусора.

2. Что такое `goroutine`?
Лёгкий поток выполнения, управляемый рантаймом Go. Запускается через `go func()`. Тысячи горутин потребляют меньше памяти, чем потоки ОС (начальный стек ~2KB, растёт при необходимости).

3. Что такое `channel`?
Типизированный канал для передачи данных между горутинами. `ch := make(chan int)`. Буферизованный: `make(chan int, 10)`. Отправка: `ch <- 42`. Приём: `val := <-ch`.

4. Что такое `select`?
Аналог switch для каналов. Выбирает первый готовый case. `default` — неблокирующий выбор.

5. Что такое `defer`?
Откладывает выполнение функции до возврата из текущей. Выполняется в LIFO порядке. Используется для `Close()`, разблокировки мьютексов.

6. Что такое `panic` и `recover`?
`panic` — аварийное завершение, разматывает стек. `recover` — перехватывает panic внутри `defer`. Не используйте panic для обычной обработки ошибок.

7. Как обрабатываются ошибки в Go?
Явным возвратом: `func f() (int, error)`. Проверка: `if err != nil { return ... }`. Нет исключений. Это идиома Go — явная обработка каждой ошибки.

8. Что такое `interface{}` / `any`?
Пустой интерфейс — принимает значение любого типа. `any` — псевдоним с Go 1.18. Используется когда тип неизвестен заранее. Для проверки типа — type assertion: `val.(string)`.

9. Что такое множественные возвращаемые значения?
`func divide(a, b int) (int, error)` — функция возвращает несколько значений. Типично для пар (результат, ошибка).

10. Что такое `make` vs `new`?
`make` — инициализирует slice, map, channel (возвращает инициализированный объект). `new` — выделяет память и возвращает указатель на нулевое значение.

11. Что такое срез (slice)?
Динамический массив. Структура: указатель на массив, длина, ёмкость. `append(slice, elem)` — добавить элемент (может создать новый underlying array).

12. Что такое `map` в Go?
Хеш-таблица: `m := make(map[string]int)`. Проверка существования ключа: `val, ok := m["key"]`. Не потокобезопасен — для конкурентного доступа используйте `sync.Map` или мьютекс.

13. Что такое `struct`?
Пользовательский тип с полями. Нет наследования — только встраивание (composition): `type Dog struct { Animal; Name string }`.

14. Что такое указатели в Go?
`T` — тип указателя. `&var` — адрес. `ptr` — разыменование. Нет арифметики указателей (в отличие от C). Используются для изменения значения внутри функции.

15. Что такое `init()` функция?
Выполняется автоматически при инициализации пакета, до `main()`. В пакете может быть несколько `init()`. Используется для регистрации, инициализации конфигурации.

Конкурентность и интерфейсы (вопросы 16–25)

16. Что такое `sync.Mutex`?
Мьютекс для синхронизации доступа к общим данным. `mu.Lock()` / `mu.Unlock()`. Типичный паттерн с `defer mu.Unlock()`.

17. Что такое `WaitGroup`?
`sync.WaitGroup` — ожидание завершения группы горутин. `wg.Add(1)` — добавить, `wg.Done()` — отметить завершение, `wg.Wait()` — ждать всех.

18. Что такое `context`?
Контекст выполнения: передаётся в функции для управления отменой (`context.WithCancel`) и таймаутами (`context.WithTimeout`). Первый аргумент в большинстве API-функций.

19. Что такое `atomic` операции?
`sync/atomic` — атомарные операции над числами без мьютекса. `atomic.AddInt64(&counter, 1)`. Быстрее мьютекса для простых счётчиков.

20. Что такое `race condition`?
Ситуация, когда результат зависит от порядка выполнения горутин. Обнаружение: `go run -race main.go`. Предотвращение: мьютексы, каналы, atomic.

21. Что такое интерфейс в Go?
Набор методов. Реализуется неявно — если тип имеет все методы интерфейса, он его реализует. Нет `implements`. `io.Reader`, `io.Writer` — примеры из стандартной библиотеки.

22. Что такое duck typing в Go?
Неявная реализация интерфейсов: «если оно ходит как утка и крякает как утка — это утка». Go проверяет набор методов, а не явное объявление.

23. Что такое `error` интерфейс?
`type error interface { Error() string }`. Любой тип с методом `Error() string` реализует `error`. `errors.New("msg")` и `fmt.Errorf("msg: %w", err)` создают ошибки.

24. Что такое `type assertion` и `type switch`?
Type assertion: `val, ok := i.(string)`. Type switch: `switch v := i.(type) { case string: ... case int: ... }` — безопасное определение типа.

25. Что такое embedding?
Встраивание типа в структуру: `type Logger struct { sync.Mutex }`. Logger автоматически получает методы Mutex. Аналог наследования через composition.

Инструменты и практика (вопросы 26–30)

26. Что такое `go modules`?
Система управления зависимостями. `go.mod` — декларация модуля и зависимостей. `go get`, `go mod tidy` — управление зависимостями.

27. Что такое `goroutine leak`?
Горутина запущена, но никогда не завершится: заблокирована на канале, которого никто не закроет. Утечка ресурсов. Предотвращение: context с cancel.

28. Что такое `go test`?
Встроенный инструмент тестирования. Файлы `_test.go`, функции `TestXxx(t testing.T)`. `t.Errorf`, `t.Fatalf` — репортинг ошибок. `-race` — проверка гонок.

29. Что такое `table-driven tests`?
Идиома тестирования в Go: тесты описываются как срез структур с входными данными и ожидаемым результатом. Позволяет легко добавлять тест-кейсы.

30. Что такое `GOPATH` и `GOROOT`?
`GOROOT` — директория установки Go. `GOPATH` — рабочая директория для проектов (устарело в пользу modules). `go env` — посмотреть все переменные окружения Go.

FAQ

Почему Go набирает популярность?
Простой синтаксис, быстрая компиляция, отличная конкурентность. Популярен для микросервисов, DevOps-инструментов, облачной инфраструктуры.

Много ли вакансий Go Junior?
Меньше, чем Python или Java, но конкуренция ниже. Хорошая ниша.

Нужен ли Go для Kubernetes?
Kubernetes написан на Go. Знание Go помогает разбираться в инструментах экосистемы.