📜  Golang 中的高阶函数

📅  最后修改于: 2021-10-25 02:18:01             🧑  作者: Mango

在围棋,语言,函数被称为高阶函数如果满足下列条件之一:
1. 将函数作为参数传递给另一个函数:
如果一个函数作为参数传递给另一个函数,那么这种类型的函数称为高阶函数。这种作为参数传递的函数在 Go 语言中也称为回调函数或一等函数
如下例所示,这里的Sphere()函数将一个函数作为参数,并返回vol float64作为参数。在 Main函数,我们创建了一个匿名函数,其签名与 Sphere函数的参数匹配,因此,我们只需调用 Sphere()函数并将结果作为参数传递给它。
例子:

CSharp
// Golang program to illustrate how to pass
// a function as an argument to another
// function
package main
 
import (
    "fmt"
    "math"
)
 
// Volume function takes
// a function as a argument
func Sphere(vol func(radius float64) float64) {
 
    fmt.Println("Volume of Sphere is:", vol(3))
}
 
// Main Function
func main() {
 
    volume_of_sphere := func(radius float64) float64 {
        result := 4 / 3 * math.Pi * radius * radius * radius
        return result
    }
 
    // Passing function as an
    // argument in Volume function
    Sphere(volume_of_sphere)
}


CSharp
// Golang program to illustrate how to pass
// a function returns another function
package main
 
import (
    "fmt"
    "math"
)
 
// Here, Volume function returns
// an anonymous function
func Sphere() func(radius float64) float64 {
 
    result := func(radius float64) float64 {
        volume := 4 / 3 * math.Pi * radius * radius * radius
        return volume
    }
 
    return result
 
}
 
// Main Function
func main() {
 
    sVol := Sphere()
    fmt.Println("Volume of Sphere is:", sVol(5))
}


输出:

Volume of Sphere is: 84.82300164692441

2. 从另一个函数返回函数:
如果一个函数返回另一个函数,那么这种类型的函数被称为高阶函数。它也被称为一等函数。如下例所示,此处的Sphere()函数返回一个匿名函数,该函数接受一个 float64 参数并返回一个 float64 参数。现在在 Main函数,sVol 存储了Sphere()函数返回的函数,因此我们调用sVol并在其中传递一个参数。
例子:

夏普

// Golang program to illustrate how to pass
// a function returns another function
package main
 
import (
    "fmt"
    "math"
)
 
// Here, Volume function returns
// an anonymous function
func Sphere() func(radius float64) float64 {
 
    result := func(radius float64) float64 {
        volume := 4 / 3 * math.Pi * radius * radius * radius
        return volume
    }
 
    return result
 
}
 
// Main Function
func main() {
 
    sVol := Sphere()
    fmt.Println("Volume of Sphere is:", sVol(5))
}

输出:

Volume of Sphere is: 392.69908169872417