匿名函数

定义

顾名思义,匿名函数就是没有名字的函数,这是它与正常函数的主要区别

创建

1
2
3
4
5
6
7
func main() {
sum := func(a int, b int) int {
return a + b
}
fmt.Println(sum(10, 20))
// sum(10, 20) -> 30
}
  • 有了匿名函数就能在函数中定义函数(函数嵌套)
  • 定义的内部函数也被称为内部函数
  • 可以使用外部函数的变量,也被称为闭包

闭包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func main() {
c1 := colsure()
fmt.Println(c1())
fmt.Println(c1())
fmt.Println(c1())
// 1
// 2
// 3
}

func colsure() func() int {
i := 0
return func() int {
i++
return i
}
}

得益于匿名函数闭包的能力,让我们自定义的colsure函数可以返回一个匿名函数,并且该匿名函数持有外部函数colsure变量i,因而在main函数中,每调用一次c1(),i的值都会+1

  • 在golang中,函数也是一种类型,它可以被用来声明函数变量,参数或者作为另一个函数的返回值类型