AI
prepair.app
Пройти интервью →
EnglishРусскийУкраїнська
🦫

Senior Go Backendвопросы на собеседовании Golang

Senior · 5+ лет опыта

Собеседование Go фокусируется на горутинах, каналах, интерфейсах и обработке ошибок — язык маленький, поэтому вопросы идут вглубь, а не вширь. Ниже — самые частые с эталонными ответами. Senior: архитектуру, трейд-оффы, менторство и принятие решений.

Темы для подготовки

Горутины и планировщик
Каналы и select
Интерфейсы и композиция
Обработка ошибок
Слайсы и мапы
Контекст и отмена

7 вопросов уровня Senior с ответами

1

Объясните разницу между слайсом и массивом. Как работает append?

Ответ

У массива фиксированная длина, входящая в его тип, и он копируется по значению. Слайс — это заголовок с указателем на подлежащий массив, длиной и ёмкостью, поэтому при передаче копируется только заголовок. append пишет в свободную ёмкость, если место есть; иначе выделяет больший массив и копирует, из-за чего возвращённый слайс может больше не разделять память с исходным — и поэтому результат append всегда нужно присваивать.

2

Что такое интерфейс в Go? Почему их называют имплицитными?

Ответ

Интерфейс — это набор сигнатур методов; любой тип, у которого эти методы есть, удовлетворяет ему без всякого объявления. Именно это и значит имплицитность — нет ключевого слова implements, поэтому интерфейс можно объявить в потребляющем пакете, и существующие типы ему уже соответствуют. Идиоматичный совет: держать интерфейсы маленькими и объявлять их там, где используют, а не рядом с реализацией.

3

Как обрабатывать ошибки в Go? Что такое error wrapping через %w?

Ответ

Ошибки — обычные значения, возвращаемые рядом с результатом и проверяемые явно в каждом месте вызова. Обёртывание через fmt.Errorf с глаголом %w сохраняет исходную ошибку внутри нового сообщения, поэтому вызывающий код по-прежнему может применить errors.Is для проверки на сентинел или errors.As для извлечения типизированной ошибки. Обёртывание добавляет контекст по мере подъёма ошибки, не лишая её программной проверяемости.

4

Что такое context.Context и зачем он нужен?

Ответ

Context переносит сигнал отмены, дедлайн и значения уровня запроса через границы API. Когда клиент отключился или сработал таймаут, отмена контекста распространяется на все производные горутины, так что запросы к базе и HTTP-вызовы прерываются, а не утекают. По соглашению его передают первым параметром и никогда не хранят в структуре.

5

Что такое defer? В каком порядке выполняются отложенные вызовы?

Ответ

defer планирует вызов на момент выхода из функции, независимо от того, каким путём или через какую панику она завершилась. Отложенные вызовы выполняются в порядке «последним пришёл — первым вышел», то есть последний defer срабатывает первым. Аргументы вычисляются в момент записи defer, а не при выполнении — частый источник сюрпризов, когда откладывают вызов, захватывающий переменную цикла.

6

Как избежать race condition? Mutex или каналы?

Ответ

Гонка данных — это несинхронизированный конкурентный доступ, где хотя бы одна сторона пишет, и она детектируется флагом -race. sync.Mutex берут, когда горутины делят кусок состояния и нужно просто сериализовать доступ к нему. Каналы берут, когда владение данными передаётся между горутинами — правило звучит как «разделяйте память через общение, а не общайтесь через разделяемую память».

7

Что такое nil-интерфейс и почему сравнение с nil может удивить?

Ответ

Значение интерфейса состоит из двух слов: типа и значения. Оно равно nil только когда оба слова nil. Если присвоить интерфейсу nil-указатель конкретного типа, слово типа заполняется, и интерфейс оказывается не-nil, хотя сам указатель nil. Это классический баг, когда функция возвращает nil *MyError как error, и проверка err != nil у вызывающего неожиданно проходит.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью Senior Go Backend →
Бесплатно · 3 интервью в месяц

Другие уровни — Go Backend

Junior Go BackendMiddle Go BackendВсе вопросы Go Backend

Другие специализации

🔍Senior QA Manual🤖Senior QA AutomationSenior Java Backend🐍Senior Python Backend🐘Senior PHP Backend🟢Senior Node.js Backend⚛️Senior React Frontend💚Senior Vue Frontend🅰️Senior Angular FrontendSenior Next.js