Тип функции
Тип функции в Go определяет сигнатуру функции - набор типов параметров и возвращаемых значений. Объявление типа функции позволяет создавать пользовательские типы на основе этой сигнатуры, что дает возможность использовать функции как значения, передавать их в другие функции и создавать более гибкие абстракции. В первый параметр мы передаем тип функции, во второй параметр мы передаем значение этого типа.
Синтаксис
type FuncType func(param1 Type1, param2 Type2) ReturnType
Пример
Давайте объявим тип функции, который принимает два целых числа и возвращает их сумму:
package main
import "fmt"
type Operation func(int, int) int
func add(a int, b int) int {
return a + b
}
func main() {
var op Operation = add
res := op(5, 3)
fmt.Println(res)
}
Результат выполнения кода:
8
Пример
Давайте используем тип функции как параметр другой функции:
package main
import "fmt"
type Process func(string) string
func toUpper(s string) string {
return "UPPER: " + s
}
func execute(p Process, input string) string {
return p(input)
}
func main() {
res := execute(toUpper, "abcde")
fmt.Println(res)
}
Результат выполнения кода:
"UPPER: abcde"
Пример
Давайте создадим тип функции, которая возвращает несколько значений:
package main
import "fmt"
type Divider func(int, int) (int, error)
func divide(a int, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("division by zero")
}
return a / b, nil
}
func main() {
var d Divider = divide
res, err := d(10, 2)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
Результат выполнения кода:
5