1 匿名函数

匿名函数由一个不带函数名的函数声明和函数体组成

  1. func(a, b int, z float64) bool {
  2. return a*b <int(z)
  3. }

匿名函数可以直接赋值给一个变量或者直接执行:

  1. f := func(x, y int) int {
  2. return x + y
  3. }
  4. func(ch chan int) {
  5. ch <- ACK
  6. } (reply_chan) // 花括号后直接跟参数列表表示函数调用

2 闭包

Go的匿名函数是一个闭包
闭包就是一个嵌套函数,它的内部函数 使用了 外部函数的变量或参数,它的外部函数 返回了 内部函数


可以保存外部函数内的变量,不会随着外部函数调用完而销毁

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. var j int = 5
  7. // a 是一个匿名函数, 返回值也是一个匿名函数
  8. // a 是一个嵌套函数, 它的内部函数引用了外部的变量, 它的外部函数返回了内部函数, 故a为闭包
  9. a := func() func() {
  10. var i int = 10
  11. return func() {
  12. fmt.Printf("i, j: %d, %d\n", i, j)
  13. }
  14. }()
  15. a() // i, j: 10, 5
  16. j *= 2
  17. a() // i, j: 10, 10
  18. }