gpt4 book ai didi

go - fmt.Println 是否必须在 Go 中的函数内?

转载 作者:数据小太阳 更新时间:2023-10-29 03:46:23 25 4
gpt4 key购买 nike

fmt.Println 是否需要始终属于一个函数?

以前使用过 Python,它允许,但在研究中,Java 似乎不允许

fmt.Println("can I do it?")

返回:

syntax error: non-declaration statement outside function body

最佳答案

它可能在一个函数之外,看这个例子:

var n, err = fmt.Println("I can do it")

func main() {
fmt.Println("In main(),", n, err)
}

它输出(在 Go Playground 上尝试):

I can do it
In main(), 12 <nil>

(输出值 12 <nil> 是第一个 fmt.Println() 调用返回的值,它写入的字节数和它返回的错误 nil 表示没有错误。)

另请注意,您甚至不必存储 fmt.Prinln() 的返回值, 您可以使用 blank identifier像这样:

var _, _ = fmt.Println("I can do it")

它不能在顶级声明“之间”的顶级声明中独立存在,但上面的变量声明(带有空白标识符)几乎可以实现相同的效果。

Spec: Source file organization:

Each source file consists of a package clause defining the package to which it belongs, followed by a possibly empty set of import declarations that declare packages whose contents it wishes to use, followed by a possibly empty set of declarations of functions, types, variables, and constants.

SourceFile       = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .

显然是 package clauseimport declaration不能包含 fmt.Println()打电话,然后 top level declarations :

Declaration   = ConstDecl | TypeDecl | VarDecl .
TopLevelDecl = Declaration | FunctionDecl | MethodDecl .

A constant declaration不能包含 fmt.Println()打电话,那不是constant expression . type declaration也不能包含函数调用。

变量声明可以,如答案顶部的示例所示。

Functionmethod declarations也可以调用fmt.Println() , 但你是在特别询问 fmt.Println()可以在它们之外调用。

因此,在顶层允许的函数之外唯一允许的地方是变量声明。

关于go - fmt.Println 是否必须在 Go 中的函数内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56053298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com