在定义时调用匿名函数
匿名函数可以在声明后调用:
package main
import (
"fmt"
)
func main() {
func(data int) {
fmt.Println(data)
}(100)
}
将匿名函数赋值给变量
匿名函数体可以被赋值:
package main
import (
"fmt"
)
func main() {
f := func(data int) {
fmt.Println(data)
}
f(100)
}
匿名函数用作回调函数
package main
import (
"fmt"
)
func visit(list []int, f func(int)) {
for _, v := range list {
f(v)
}
}
func main() {
visit([]int{1, 2, 3, 4}, func(v int) {
fmt.Println(v)
})
}
输出:
1
2
3
4
使用匿名函数实现操作封装
下面这个例子将匿名函数作为map的键值:
package main
import (
"flag"
"fmt"
)
var skillParam = flag.String("skill", "", "skill to perform")
func main() {
flag.Parse()
var skill = map[string]func(){
"fire": func() {
fmt.Println("chickren fire")
},
"run": func() {
fmt.Println("soldier run")
},
"fly": func() {
fmt.Println("angel fly")
},
}
if f, ok := skill[*skillParam]; ok {
f()
} else {
fmt.Println("skill not found")
}
}
$ go run main.go -skill "fire"
chickren fire