go - 新来的, parent 的解释

标签 go

<分区>

我是新来的,遇到了一组我不理解的 parent 。

在下面的代码中,我使用了一个基本的 defer 语句来打印 panic 的输出。

为了让代码正常工作,我必须在关闭大括号的函数结束后添加一个左括号和右括号。

显然我没有正确理解某些东西。我是否认为它上面的两行是函数的主体?如果它们是函数的主体,那么在它服务之后 parens 的目的是什么。如果它们不是 body ,那么有人可以解释这里发生了什么吗?

没有括号我得到的错误是:

#命令行参数 ./goTemplate.go:14: 语法错误:go/defer 的参数必须是函数调用

package main
import "fmt"

func main(){
    defer func() {
        str := recover()
        fmt.Println(str)
    }()
    fmt.Println("Hello, World")
    panic("PANIC")
}

最佳答案

来自Defer spec :

The expression must be a function or method call;

在您的例子中,它是一个函数调用:() 调用该函数)。
如果没有 (),它将是一个函数 value

您可以在“Why add “()” after closure body in Golang?”中查看更多信息。

关于go - 新来的, parent 的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951568/

相关文章:

go - 如何使用gocql查询cassandra UDT?

postgresql - Google App Engine Golang 连接到 Cloud SQL Postgres unix 拨号没有这样的文件或目录

go - 如何使用 go/golang 中的 FileServer 函数将文件提供给特定的 url 路径

转到目标语言

json - 希望使用 Golang 将 json 文件转换为 csv 文件

go - 普罗米修斯计数器 : How to get current value with golang client?

docker - 如何禁用 CGO 以运行测试

go - 为什么 "import"和ImportSpec之间可以出现多行注释,而PackageName和ImportPath之间不能?

go - 展开包导入路径

go - 在 goroutine 中使用指针接收器