go语言defer与匿名函数

  学习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")}

  第一个小括号是参数列表,第二个小括号是返回值,大括号中是函数体。

调用
  1. 无参数直接加括号
 func() int {
    var i int =5
    fmt.Printf("func 1\n")
    return i
 }()
  1. 有参数,在括号里加参数
 func(arge int)  {
   fmt.Printf("func %d\n",arge)
 }(2)
  1. 也可以先赋给一个变量再调用
 a := func() int {
    fmt.Printf("func 3\n")
    return 5
 }
 a()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值