> Что такое функция (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: Лукойл
Стек: Go
> Пример ответа
Короткий ответ
Функция - это именованный блок кода, который можно вызывать многократно. Она принимает входные параметры, выполняет определённые действия и возвращает результат. В Go функции объявляются с ключевым словом func, поддерживают множественные возвращаемые значения и могут быть переданы как значения. Функции - базовый механизм декомпозиции программы на переиспользуемые части.
Подробное объяснение
Функция в программировании - это абстракция, которая группирует последовательность инструкций под одним именем. Основные характеристики:
- Сигнатура - имя, список параметров с типами и возвращаемые типы
- Параметры - входные данные, которые функция принимает
- Возвращаемое значение - результат работы функции (в Go может быть несколько)
- Область видимости - переменные, объявленные внутри функции, локальны для неё
В Go функции - это значения первого класса: их можно присваивать переменным, передавать в другие функции и возвращать из функций. Это позволяет реализовывать паттерны вроде callbacks и замыканий.
Функции решают три ключевые задачи: переиспользование кода, декомпозиция сложных задач и изоляция состояния. В отличие от методов, функции не привязаны к типу - методы в Go - это функции с ресивером.
На практике
В backend-разработке на Go функции используются повсеместно:
- Обработчики HTTP-запросов - функции с сигнатурой
func(w http.ResponseWriter, r *http.Request) - Middleware - функции, оборачивающие другие функции
- Абстракция бизнес-логики - сервисные функции, которые вызываются из handlers
- Утилитарные функции для валидации, форматирования, работы с данными
Важно проектировать функции так, чтобы они делали одну вещь и делали её хорошо. Это упрощает тестирование и поддержку кода. В Go принято возвращать ошибку как последнее возвращаемое значение - это стандартный паттерн обработки ошибок.
Пример кода
GOpackage mainimport "fmt"// Функция с одним возвращаемым значениемfunc add(a int, b int) int {return a + b}// Функция с несколькими возвращаемыми значениямиfunc divide(a, b int) (int, error) {if b == 0 {return 0, fmt.Errorf("division by zero")}return a / b, nil}// Функция как значение (callback)func applyOperation(x int, y int, op func(int, int) int) int {return op(x, y)}// Замыканиеfunc multiplier(factor int) func(int) int {return func(x int) int {return x * factor}}func main() {sum := add(2, 3)fmt.Println(sum) // 5result, err := divide(10, 2)if err != nil {fmt.Println(err)} else {fmt.Println(result) // 5}fmt.Println(applyOperation(4, 5, add)) // 9double := multiplier(2)fmt.Println(double(10)) // 20}
Как отвечать на собеседовании
Начни с простого определения, затем добавь детали, специфичные для Go. Структура ответа:
- Базовое определение - блок кода с именем, параметрами и возвращаемым значением
- Упомяни синтаксис
funcи множественные возвращаемые значения - Добавь про функции как значения первого класса - это сильная сторона Go
- Приведи пример из реальной практики: HTTP handler или middleware
- Если спросят про методы - уточни, что метод отличается от функции наличием ресивера
Не углубляйся в теорию без запроса. Держи ответ в рамках 1-2 минут. Если интервьюер хочет больше деталей - он задаст уточняющий вопрос.
Что проверяет интервьюер
Интервьюер оценивает:
- Понимание базовой концепции функции - не просто заученное определение, а осознание назначения
- Знание синтаксиса Go - корректное описание сигнатуры, возвращаемых значений
- Понимание отличий функций в Go от других языков - множественные возвращаемые значения, отсутствие перегрузки, функции как значения
- Умение объяснить практическое применение - где в реальном коде используются функции
- Способность говорить структурированно и по существу
Для junior-позиции достаточно уверенного владения базой. Глубокие вопросы про замыкания или defer обычно задают на более высоких уровнях.
Типичные ошибки
- Путаница между функцией и методом - метод привязан к типу через ресивер, функция - нет
- Утверждение, что в Go есть перегрузка функций - это не так, имя функции должно быть уникальным в пакете
- Забывают упомянуть множественные возвращаемые значения - ключевая особенность Go
- Неправильное описание области видимости - переменные внутри функции не видны снаружи
- Слишком абстрактный ответ без примеров - интервьюеру важно видеть, что кандидат писал реальный код
- Попытка рассказать всё сразу - лучше ответить на заданный вопрос и дать возможность задать следующий
> Похожие задачи по backend
Что такое WebSocket и как он работает
Как реализовать миграции базы данных
Какие стратегии пагинации можно использовать вместо LIMIT OFFSET?
Был ли опыт работы с MongoDB или аналогичными документно-ориентированными базами данных
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью