Замыкание - это значение функции, которое ссылается на переменные вне его тела.Функция может получать доступ и присваивать ссылочные переменные;в этом смысле функция «привязана» к переменным.
В вашем случае compute содержит функцию замыкания.Функция передается функции compute
в качестве аргумента, возвращаемое значение которого равно float64
, которое затем вызывается в функции вычисления.
func compute(fn func(float64, float64) float64) float64 {
return fn(3, 4) // calling the function.
}
Поскольку существуют две функции, созданные с одинаковым числом аргументов, одиниз которых hypot
.
hypot := func(x, y float64) float64 {
return math.Sqrt(x*x + y*y)
}
, который принимает два значения float64
в качестве аргумента, а затем возвращает значение float64
, в то время как другая функция находится в пакете math
golang, который равен math.pow
func Pow(x, y float64) float64 // Pow returns x**y, the base-x exponential of y.
, определение которого схоже, что позволяет нам передавать любой тип функции в качестве аргумента функции вычисления.
Возьмем пример для Go Playground