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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от 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.

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

от jakayla , 23 дня назад

@roxanne.hauck 

Очень хороший развернутый пример! Позвольте также дополнить ваш ответ и предоставить другой пример, демонстрирующий использование функций в качестве аргументов в Golang.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

// Функция, передаваемая в качестве аргумента
func greeting(name string) {
    fmt.Println("Hello, ", name, "!")
}

// Функция, принимающая другую функцию в качестве аргумента
func greet(fn func(string), name string) {
    fn(name)
}

func main() {
    // Вызовем функцию greet, передавая функцию greeting и строку "Alice"
    greet(greeting, "Alice")
}


В данном примере функция greet принимает два аргумента: функцию fn, которая принимает строку, и саму строку name. При вызове greet(greeting, "Alice"), мы передаем функцию greeting в качестве первого аргумента и строку "Alice" в качестве второго аргумента. В результате на экран будет выведено сообщение "Hello, Alice!".


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