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 mainimport ("fmt")func main() {var j int = 5// a 是一个匿名函数, 返回值也是一个匿名函数// a 是一个嵌套函数, 它的内部函数引用了外部的变量, 它的外部函数返回了内部函数, 故a为闭包a := func() func() {var i int = 10return func() {fmt.Printf("i, j: %d, %d\n", i, j)}}()a() // i, j: 10, 5j *= 2a() // i, j: 10, 10}
