@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.