5.6.1.1. 函数调用作为函数参数
如果一个函数或方法接受一个或多个参数,我们当然可以传入相应的参数来调用它。此外,我们也可以传入另一个函数或方法来调用该函数,但前提是另一个函数的返回值和类型与要调用的函数参数一致。
下面的函数接受三角形三个边的长度作为参数(三个int类型),并使用Heron公式计算并输出三角形的面积。
1 2 3 4 5 6 7 8 9 10 11  |     for i := 1; i <= 4; i++ {         a, b, c := PythagoreanTriple(i, i+1)         Δ1 := Heron(a, b, c)         Δ2 := Heron(PythagoreanTriple(i, i+1))         fmt.Printf("Δ1 == %10f == Δ2 == %10f\n", Δ1, Δ2) }     Δ1 == 6.000000 == Δ2 == 6.000000     Δ1 == 30.000000 == Δ2 == 30.000000     Δ1 == 84.000000 == Δ2 == 84.000000     Δ1 == 180.000000 == Δ2 == 180.000000  | 
首先,我们使用勾股定理得到边长,然后我们将得到的三个边长作为参数传入Heron()函数,然后我们重复此计算,只是这次我们直接使用PythagoreanTriple()函数作为Heron()函数的参数,利用Go语言特性PythagoreanTriple()函数的三个返回值转换为Heron()函数的三个参数。
1 2 3 4 5 6 7 8 9 10 11  | func Heron(a, b, c int) float64 {     α, β, γ := float64(a), float64(b), float64(c)     s := (α + β + γ) / 2     return math.Sqrt(s * (s - α) * (s - β) * (s - γ)) } func PythagoreanTriple(m, n int) (a, b, c int) {     if m < n {         m, n = n, m     }     return (m * m) - (n * n), (2 * m * n), (m * m) + (n * n) }  | 
我们已完全呈现了Heron()和PythagoreanTriple()函数,并且PythagoreanTriple()函数使用了命名返回值,算是对函数使用的的一种补充。
  
