//匿名函数,就是函数不带函数名字呢!func(int)(int)
//闭包通过匿名函数实现
func OFFBag() {
a, str := 10, "闭包"
//匿名函数定义,形成一个闭包,函数里面可以使用变量a和Str
f1 := func() { //自动推导
fmt.Println("a= ", a)
fmt.Println("str= ", str)
}
//调用f1()
f1()
//第二种调用方式,少用
type FuncType func() //定义函数类型
var f2 FuncType = f1 //声明变量
f2()
//第三种调用方式,声明同时调用
func() { //自动推导
fmt.Println("a= ", a)
fmt.Println("str= ", str)
}() //圆括号代表调用匿名函数
//带参数的匿名函数
func(i, j int32) { //自动推导
fmt.Println("i= ", i)
fmt.Println("j= ", j)
}(10, 20) //圆括号代表调用匿名函数
//有参数有返回值的匿名函数
max, _ := func(i, j int32) (max, min int32) { //自动推导
if i > j {
return i, j
}
return j, i
}(10, 20) //圆括号代表调用匿名函数
fmt.Println("max= ", max)
}
func main() {
//声明并赋值变量
str := "闭包的特点"
fmt.Println("", str)
f := test1()
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
}
//函数的返回值是一个匿名函数,返回一个函数类型
func test1() func() int32 {
var x int32
return func() int32 {
x++
return x * x
}
输出结果:用来初始化一些全局变量