11.4 函数字面量

函数字面量表示匿名函数。

func(a, b int, z float64) bool { return a*b < int(z) }  // 请注意,匿名函数没有函数名称

可以直接调用函数文本,也可以将其分配给变量,稍后可以调用该变量。

f := func(x, y int) int { return x + y }       // 将匿名函数分配给变量 f
sum := f(1, 2)                                 // f 是可调用的
func(ch chan int) { ch <- ACK }(replyChan)     // 也可以直接调用匿名函数

函数字面量是闭包。它们可能引用周围函数中定义的变量。

这些“被封闭的变量”在周围函数和函数字面量之间共享,并且只要可以访问(例如,即使周围函数的栈帧被删除后)就会存在。

这是使用匿名函数生成斐波那契数列的示例代码。

package main

import (
    "fmt"
)

func fib() func() int { // fib 函数返回一个类型为 func() int 的函数
    a, b := 0, 1

    return func() int {        // fib 函数返回一个匿名函数,这是一个闭包
        a, b = b, a+b          // 请注意,变量 a 和 b 是在闭包函数中声明的
        return a
    }
}

func main() {
    f := fib()

    for x := f(); x < 100; x = f() {
        fmt.Println(x)
    }
}

最后更新于