> Можно ли передать функцию как аргумент в другую функцию в Go (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Avito
Стек: Go
> Пример ответа
Да, в Go функции являются объектами первого класса, поэтому их можно передавать как аргументы в другие функции. Это широко используется для реализации callback-ов, middleware и паттернов вроде стратегии.
Пример:
GOpackage mainimport "fmt"// Функция, принимающая другую функцию как аргументfunc applyOperation(a, b int, op func(int, int) int) int {return op(a, b)}func main() {add := func(x, y int) int { return x + y }multiply := func(x, y int) int { return x * y }fmt.Println(applyOperation(3, 4, add)) // 7fmt.Println(applyOperation(3, 4, multiply)) // 12}
Также можно использовать тип функции для читаемости:
GOtype Operation func(int, int) intfunc apply(a, b int, op Operation) int {return op(a, b)}
Это основа для таких идиом, как передача обработчиков в HTTP-роутер (например, http.HandleFunc) или реализация сортировки через sort.Slice с пользовательской функцией сравнения.
> Похожие задачи по backend
В чем разница между Kafka и RabbitMQ
Как использовать EXPLAIN и ANALYZE для оптимизации SQL запросов
Какова структура HTTP-ответа
Какова асимптотическая сложность доступа по ключу в хэш-таблице
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью