学习go语言的时候,遇到了一个例子
func main() {
a := []int{1, 2, 3, 4}
defer func(a []int) {
fmt.Printf("a: %v\n", a)
}(a)
a[0], a[1] = a[2], a[3]
defer func() {fmt.Println("aloha")}()
}
defer
这里定义了一个匿名函数,该匿名函数由defer修饰,意味着,该函数会在主函数return之后,执行,所有被defer修饰的函数会被压入栈中,先被修饰的后执行。上述的例子中,会先输出aloha,再打印数组。
匿名函数
go语言的匿名函数分定义和调用两种情况:
定义
func()() {fmt.Println("hello")}
第一个小括号是参数列表,第二个小括号是返回值,大括号中是函数体。
调用
- 无参数直接加括号
func() int {
var i int =5
fmt.Printf("func 1\n")
return i
}()
- 有参数,在括号里加参数
func(arge int) {
fmt.Printf("func %d\n",arge)
}(2)
- 也可以先赋给一个变量再调用
a := func() int {
fmt.Printf("func 3\n")
return 5
}
a()