为什么 defer后面可以这么写
defer func(){
//something
}()
而return后面
return func(){
//something
}()
这么写就会报错: (func literal)() used as value
有疑问加站长微信联系(非本文作者)

为什么 defer后面可以这么写
defer func(){
//something
}()
而return后面
return func(){
//something
}()
这么写就会报错: (func literal)() used as value
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
defer 是“延后执行”,必须是 带()的才能执行; return 是 ”返回数值“,是 class1类型,不能带()执行。
除此之外,我再也看不出你的疑问是什么了??
如果你还不明,再起新讨论帖子吧。请详细说明 你希望的样子, 实际的样子, 你疑惑的地方。相信会有 高手 乐意帮你的。
defer后面是 函数调用。而return 返回一个函数,这2者明显是有区别的。
则是定义一个匿名函数。
则是定义一个匿名函数并调用执行。
return 后也是可以跟函数调用的,因为return,所以return之后的匿名函数的声明必须要返回一个值,如我的例子 func fTest() int { defer func() { fmt.Println("defer") }()
}
能够正常编译,且执行结果为 return defer
匿名函数后面加()是运行这个函数的意思。所以defer里面的function后带()很好理解,这本来就是要运行一个函数嘛。 那么return呢?实际上return也可以是运行函数的啊,返回函数运行的结果就是,所以这里遇到的错误应该是匿名函数返回值和function本身返回值不同的错误,并非不可以在return语句里面写()这个
我猜是返回的类型不对