> Можно ли передать функцию как аргумент в другую функцию в Go (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Avito

Стек: Go

> Пример ответа

Да, в Go функции являются объектами первого класса, поэтому их можно передавать как аргументы в другие функции. Это широко используется для реализации callback-ов, middleware и паттернов вроде стратегии.

Пример:

GO
package main
import "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)) // 7
fmt.Println(applyOperation(3, 4, multiply)) // 12
}

Также можно использовать тип функции для читаемости:

GO
type Operation func(int, int) int
func apply(a, b int, op Operation) int {
return op(a, b)
}

Это основа для таких идиом, как передача обработчиков в HTTP-роутер (например, http.HandleFunc) или реализация сортировки через sort.Slice с пользовательской функцией сравнения.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью