1. 匿名函数的声明
所谓匿名函数,就是没有名字的函数,它只有函数逻辑体,而没有函数名。
定义的格式如下
func(参数列表)(返回参数列表){
函数体
}
匿名函数的定义就是没有名字的普通函数定义。
2. 匿名函数的作用
2.1 在定义时调用匿名函数
匿名函数可以在声明后调用,例如:
func(data int) {
fmt.Println("hello", data)
}(100)
注意第3行}后的(100),表示对匿名函数进行调用,传递参数为 100。
而且必须定义在函数里
2.2 匿名函数可以赋值
f := func(data int) {
fmt.Println("hello", data)
}
f(100)
2.3 匿名函数作为回调函数
package main
import "fmt"
func main() {
prints([]int{1, 2, 3}, func(i int) {
fmt.Println(i)
})
}
func prints(list []int, f func(int)) {
for _, b := range list {
f(b)//打印
}
}
2.4 使用匿名函数实现操作封装
package main
import (
"flag"
"fmt"
)
var skillParam = flag.String("skill", "", "skill to perform")
func main() {
func(data int) {
fmt.Println("hello", data)
}(100)
flag.Parse()
var skill = map[string]func(){
"fire": func() {
fmt.Println("chicken fire")
},
"run": func() {
fmt.Println("soldier run")
},
"fly": func() {
fmt.Println("angel fly")
},
}
if f, ok := skill[*skillParam]; ok {
f()
fmt.Println(skill)
} else {
fmt.Println("skill not found")
}
}
代码说明如下:
第 6行,定义命令行参数 skill,从命令行输入 –skill 可以将=后的字符串传入 skillParam 指针变量。
第 11 行,解析命令行参数,解析完成后,skillParam 指针变量将指向命令行传入的值。
第 12 行,定义一个从字符串映射到 func() 的 map,然后填充这个 map。
第 12~22 行,初始化 map 的键值对,值为匿名函数。
第 23 行,skillParam 是一个 *string 类型的指针变量,使用 *skillParam 获取到命令行传过来的值,并在 map 中查找对应命令行参数指定的字符串的函数。
第 24 行,执行匿名函数
第 27 行,如果在 map 定义中存在这个参数就调用,否则打印“技能没有找到”。
运行代码,结果如下:
PS D:\code> go run main.go --skill=fly
angel fly
PS D:\code> go run main.go --skill=run
soldier run
3. 总结
这篇文章是我在百度查资料记的笔记,可能和原文雷同,找不到链接。贴不到网址!
版权声明:本文为yyclassmvp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。