1、在go语言中,所有的匿名函数(规范称为:函数字面量)都是闭包函数,匿名函数不需要定义函数名的一种函数
实现形式,它并不是一个新概念,可以追溯到语言
2、闭包:就是一个“函数”捕获了和它在同一个作用域的其他常量。
这就意味着当闭包被调用的时候,不管程序在什么地方调用,闭包都能够使用这些常量或者变量。
它并不关心这些捕获的常量和数量是否已经超越了作用域,所以只要这些闭包还在使用,这些变量就还会存在
package main
import "fmt"
func main() {
rank := 1
comment := "优秀"
//第一种方式,可以通过定义变量来调用匿名函数
f := func() {
fmt.Printf("rank=%d,comment=%s ", rank, comment)
}
f() //函数调用
//第二种方式,通过定义一个函数类型进行调用
type Ftest func()
var f2 Ftest = f
f2()
//第三种,不通过变量,定义完立即执行
//无参无返回值
fmt.Println("无参无返回值--")
func() {
fmt.Printf("rank=%d,comment=%s ", rank, comment)
}() //()表示对匿名函数的调用
//有参无返回值
func(a, b int) {
res := a + b
fmt.Println(res)
}(1, 3) //传参调用
//有参有返回值
result := func(a, b int) (res int) {
res = a + b
return
}(1, 3) //传参调用匿名函数
fmt.Println("result=", result)
}
运行结果: