> 匿名函数即没有名字的函数,常用于实现回调函数、闭包等应用。
[TOC]
## 直接调用
~~~
func() {
fmt.Printf("func 1\n")
}()
// 有参数的情况下,后面是传入对应的参数
func(x int) {
fmt.Printf("x is %d\n", x)
}(3)
~~~
## 将匿名函数赋值给变量
~~~
// 定义一个闭包,并将闭包函数赋值给变量f1、f2
num := 0
//var f1 func()
var f2 func(x int, y int) int
f1 := func() {
// 只直接引用上下文环境
num ++
}
f2 = func(x int, y int) int {
return x+y
}
// 执行结果
f1()
f1()
fmt.Println(num)
total := f2(2,3)
fmt.Println(total)
~~~
## 将匿名函数用作回调函数
~~~
package main
import "fmt"
func main() {
//调用函数,对每个元素后面都加上a标识
arr := []string{"1", "2", "3"}
fmt.Println(visit(arr, func(v string) string {
v += "a"
return v
}))
//调用函数,对每个元素后面都加上b标识
fmt.Println(visit(arr, func(v string) string {
v += "b"
return v
}))
}
//定义一个函数,遍历切片元素,对每个元素进行处理
func visit(list []string, f func(string) string) string {
str := ""
for _, value := range list {
str += f(value)
}
return str
}
~~~
> 运行结果
~~~
1a2a3a
1b2b3b
~~~
## 将匿名函数作为闭包
> 一个函数和与其相关的引用环境结合组成的实体
~~~
package main
import "fmt"
func main() {
var f = Adder()
fmt.Println(f(1), "-")
fmt.Println(f(20), "-")
fmt.Println(f(300), "-")
}
func Adder() func(int) int {
var x = 0
return func(delta int) int {
x += delta
return x
}
}
~~~
> 运行结果
~~~
1 -
21 -
321 -
~~~
- 基础知识
- 开发环境
- 包名规则
- 包初始化 (init)
- 基础数据类型
- 基础类型转换
- 格式化输出
- go指针
- 流程控制语句
- 函数定义
- 匿名函数
- 数组和切片
- map集合
- 结构体
- Interface接口
- 日期处理
- 数学计算
- 正则表达式
- 协程 (并发处理)
- channel
- waitgroup
- mutex (锁机制)
- websocket
- protobuf
- Redis
- 错误处理
- 打包程序
- NSQ消息队列
- 单元测试
- beego
- 安装入门
- Gin
- 快速入门
- 路由与控制器
- 处理请求参数
- 表单验证
- 处理响应结果
- 渲染HTML模版
- 访问静态文件
- Gin中间件
- Cookie处理
- Session处理
- Gin上传文件
- swagger
- pprof性能测试
- GORM
- 入门教程
- 模型定义
- 数据库连接
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 事务处理
- 关联查询
- 属于 (BELONG TO)
- 一对一 (Has One)
- 一对多 (Has Many)
- 多对多 (Many to Many)
- 预加载 (Preloading)
- 错误处理
- 第三方常用插件
- viper 读取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷键