我是新来的,遇到了一些我不理解的问题。
在下面的代码中,我使用基本的延迟语句来打印恐慌的输出。
要使代码生效,我必须在我的函数结束大括号后添加一个打开和关闭的paren。
显然我并不理解。我认为它上面的两条线是函数体是不正确的吗?如果它们是功能的主体,则它在服务后的用途是什么目的。如果他们不是身体,那么有人可以解释这里发生了什么吗?
没有parens我得到的错误是:
# command-line-arguments
./goTemplate.go:14: syntax error: argument to go/defer must be function call
。
package main
import "fmt"
func main(){
defer func() {
str := recover()
fmt.Println(str)
}()
fmt.Println("Hello, World")
panic("PANIC")
}
答案 0 :(得分:1)
来自Defer spec:
表达式必须是函数或方法调用;
在你的情况下,它是一个函数调用:()
调用函数
如果没有()
,它将是一个函数 value 。
您可以在" Why add “()
” after closure body in Golang?"。