1 匿名函数
匿名函数由一个不带函数名的函数声明和函数体组成
func(a, b int, z float64) bool {
return a*b <int(z)
}
匿名函数可以直接赋值给一个变量或者直接执行:
f := func(x, y int) int {
return x + y
}
func(ch chan int) {
ch <- ACK
} (reply_chan) // 花括号后直接跟参数列表表示函数调用
2 闭包
Go的匿名函数是一个闭包
闭包就是一个嵌套函数,它的内部函数 使用了 外部函数的变量或参数,它的外部函数 返回了 内部函数
可以保存外部函数内的变量,不会随着外部函数调用完而销毁
package main
import (
"fmt"
)
func main() {
var j int = 5
// a 是一个匿名函数, 返回值也是一个匿名函数
// a 是一个嵌套函数, 它的内部函数引用了外部的变量, 它的外部函数返回了内部函数, 故a为闭包
a := func() func() {
var i int = 10
return func() {
fmt.Printf("i, j: %d, %d\n", i, j)
}
}()
a() // i, j: 10, 5
j *= 2
a() // i, j: 10, 10
}