关于匿名函数定义后面加括号的问题func(){}()?

JimmyJin · 2015-09-19 18:48:48 · 8071 次点击
qkb_75_go
琴为心声

defer 是“延后执行”,必须是 带()的才能执行; return 是 ”返回数值“,是 class1类型,不能带()执行。

除此之外,我再也看不出你的疑问是什么了??

如果你还不明,再起新讨论帖子吧。请详细说明 你希望的样子, 实际的样子, 你疑惑的地方。相信会有 高手 乐意帮你的。

#1
更多评论

defer后面是 函数调用。而return 返回一个函数,这2者明显是有区别的。

func() {

}

则是定义一个匿名函数。

func() {

}()

则是定义一个匿名函数并调用执行。

#2

return 后也是可以跟函数调用的,因为return,所以return之后的匿名函数的声明必须要返回一个值,如我的例子 func fTest() int { defer func() { fmt.Println("defer") }()

return func() int {
    fmt.Println("return")
    return 1
}()

}

能够正常编译,且执行结果为 return defer

#3