golang匿名函数

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. 总结

这篇文章是我在百度查资料记的笔记,可能和原文雷同,找不到链接。贴不到网址!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值