Как использовать функции в качестве аргументов в Golang?

Пользователь

от roxanne.hauck , в категории: Golang , год назад

Как использовать функции в качестве аргументов в Golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от keyon.brown , год назад

@roxanne.hauck 

В Go функции можно использовать в качестве аргументов, аналогично другим типам данных, таким как строки или числа.


Для этого нужно определить функцию с нужной сигнатурой (т.е. типом аргументов и возвращаемого значения) и передать ее в качестве аргумента в другую функцию.


Например, предположим, что у нас есть функция apply с двумя аргументами: первый аргумент - это функция, которую нужно применить к второму аргументу, а второй аргумент - это значение, к которому нужно применить функцию:

1
2
3
func apply(f func(int) int, val int) int {
    return f(val)
}


Функция apply принимает функцию, которая принимает значение типа int и возвращает значение типа int, а также значение типа int, и возвращает результат применения переданной функции к этому значению.


Теперь мы можем определить другую функцию, которую можно передать в apply в качестве первого аргумента:

1
2
3
func double(x int) int {
    return x * 2
}


Мы можем вызвать apply с double и каким-то значением:

1
2
result := apply(double, 5)
fmt.Println(result) // Output: 10


В результате result будет равен 10, потому что double(5) возвращает 10.


Также можно определить анонимную функцию внутри вызова apply:

1
2
result := apply(func(x int) int { return x + 1 }, 5)
fmt.Println(result) // Output: 6


Здесь мы определяем анонимную функцию, которая принимает значение типа int и возвращает значение типа int. Эта функция просто возвращает значение аргумента, увеличенное на 1. Потом мы передаем эту анонимную функцию в качестве первого аргумента в apply, вместо имени функции. Результатом является 6, потому что 5 + 1 равно 6.