Тип функции

Тип функции в Go определяет сигнатуру функции - набор типов параметров и возвращаемых значений. Объявление типа функции позволяет создавать пользовательские типы на основе этой сигнатуры, что дает возможность использовать функции как значения, передавать их в другие функции и создавать более гибкие абстракции. В первый параметр мы передаем тип функции, во второй параметр мы передаем значение этого типа.

Синтаксис

gotype FuncType func(param1 Type1, param2 Type2) ReturnType

Пример

Давайте объявим тип функции, который принимает два целых числа и возвращает их сумму:

gopackage 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)
}

Результат выполнения кода:

go8

Пример

Давайте используем тип функции как параметр другой функции:

gopackage 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)
}

Результат выполнения кода:

go"UPPER: abcde"

Пример

Давайте создадим тип функции, которая возвращает несколько значений:

gopackage 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)
  }
}

Результат выполнения кода:

go5

Смотрите также

  • тип данных функция,
    который позволяет объявлять пользовательские типы функций
  • тип данных указатель,
    который хранит адрес значения в памяти
  • тип данных слайс,
    который представляет динамический массив элементов
  • тип данных строка,
    которая представляет последовательность байт