Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
57 lines (39 sloc) 1.63 KB

函数作为参数

Go 函数可以接收另一个 Go 函数作为参数,这个功能为您用 Go 函数增加了非常广泛的用途。这个功能最为常用的用途就是闭包。这里介绍的 funFun.go,是一个非常简单的处理整数值的例子。相关代码分为三部分介绍。

funFun.go 的第一部分代码如下:

package main

import "fmt"

func function1(i int) int {
    return i + i
}

func function2(i int) int {
    return i * i
}

这里是两个接收 int 并返回 int 的函数。它们一会用于作为另个函数的参数。

funFun.go 的第二段函数包含如下代码:

func funFun(f func(int) int, v int) int {
    return f(v)
}

funFun() 函数接收两个参数,一个名为 f 的函数和一个 int 值。f 参数是一个接收 int 参数并返回 int 值的函数。

funFun.go 的最后一段如下:

func main() {
    fmt.Println("function1:", funFun(function1, 123))
    fmt.Println("function2:", funFun(function2, 123))
    fmt.Println("Inline:", funFun(func(i int) int {return i * i * i}, 123))
}

第一个 fmt.Println() 调用使用 function1 作为第一个参数的 funFun(),第二个 fmt.Println() 调用使用 function2 作为第一个参数的 funFun()

最后一个 fmt.Println() 表达式,奇妙的是:这个函数参数的实现定义在 funFun() 调用里!

尽管这个方法可以运行简单的,小巧的函数参数,对于多行代码的函数还是尽量不要这样使用。

执行 funFun.go 将产生如下输出:

$go run funFun.go
function1: 246
function2: 15129
Inline: 1860867
You can’t perform that action at this time.