DevGang
Авторизоваться

Функции Golang как и другие типы

  • Переменные могут быть объявлены с типом функции
  • Функция в качестве аргументов
  • Функция в качестве возвращаемых значений

Переменные как функции

Мы могли бы объявить переменную как функцию.


package main

import "fmt"

func Doubler(d int) int {
	return d * 2
}

func main() {
	var funVar func(int) int // declare a variable as a function
	funVar = Doubler         // here we have assigned a function to a variable. Note: We haven't called the function using ().
	fmt.Println(funVar(2))
	fmt.Println(funVar(10))
}

В приведенном выше коде у нас есть:

  • функция с именем Doubler, который импеет параметр int и возвращаемый тип int. Эта простая функция просто удваивает заданное значение и возвращает его.
  • в основе функции мы объявили переменную, как функцию. Функция funVar имеет тип функции с параметром int и типом возвращаемого значения
func(int) int - сингатура функции
  • присвоил функцию Doubler переменной funVar, поскольку они соответствуют типам
  • и теперь funVar можно вызвать в любое время с аргументом int, чтобы получить результат

Функции как аргумент

Функция может быть передана в качестве аргумента другой функции


package main

import "fmt"

func Doubler(d int) int {
	return d * 2
}

// function that takes function[func(int) int] as an argument 
func CallIt(f func(int) int, v int) {
	fmt.Println(f(v))
}

func main() {
	CallIt(Doubler, 2)
	CallIt(Doubler, 10)
}
  • CallIt - это функция, которая принимает функцию в качестве аргумента и вызывает функцию со значением, которое мы предоставили в качестве другого аргумента

Функции как возвращаемые значения

Функции могут возвращать функции

package main

import "fmt"

// Doubler function returns function with int parameter and int return type
func Doubler() func(int) int {
	return func(x int) int { return x * 2 }
}

// same as Doubler function but DoublerWithOwnValue function return the function with no parameter and int return type.
// Point to note: the function returned by this function uses the variable x declared inside the DoublerWithOwnValue function.
//
//	which means if the value of the x is altered then it will be affected at the function call.
func DoublerWithOwnValue() func() int {
	x := 10
	f := func() int { return x * 2 }
	//x = 200 // if this line is uncommented then while calling the returned function we will get the double of 200 which is 400
	return f
}

func main() {
	f := Doubler()
	fmt.Println(f(5))
	fmt.Println(f(15))

	f1 := DoublerWithOwnValue()
	fmt.Println(f1())
}

Тип функции

Ниже приведен простой код, чтобы показать вам, что мы также могли бы создать отдельный тип, используя сигнатуру функции, и делать с этим типом все, что захотим.
package main

import "fmt"

// declare a function type using function signature
type Greeter func(name string) string

// Morning method with the Greeter receiver type
func (g Greeter) Morning(n string) string {
	return "Good Morning! " + n
}

func main() {
	// using the Greeter function type
	var gtr Greeter
	user := "Logesh"
	gtr = func(n string) string { return "Hello, " + n }
	fmt.Println(gtr(user))

	fmt.Println(gtr.Morning(user))
}

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

#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу