fmt.Println
是否必须始终属于一个函数?
以前使用过Python,并且允许使用,但是在研究中,Java似乎没有使用
fmt.Println("can I do it?")
返回:
语法错误:函数主体外的非声明语句
答案 0 :(得分:0)
它可能在函数之外,请参见以下示例:
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:
每个源文件都由一个package子句组成,该子句定义了它所属的package,其后是一组可能为空的导入声明,这些声明声明了要使用其内容的包,然后是一组可能为空的函数类型声明,变量和常量。
SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
很显然,package clause或import declaration不能包含fmt.Println()
呼叫,并且top level declarations:
Declaration = ConstDecl | TypeDecl | VarDecl . TopLevelDecl = Declaration | FunctionDecl | MethodDecl .
constant declaration不能包含fmt.Println()
的呼叫,不是constant expression。 type declaration也不能包含函数调用。
变量答案可以如答案顶部的示例所示。
Function和method declarations也可以呼叫fmt.Println()
,但是您在问是否可以在它们之外调用fmt.Println()
。
因此,在顶层允许的函数之外唯一允许的地方是变量声明。
答案 1 :(得分:0)
总是在主函数中开始执行,因此fmt.Println()必须在主函数或在main中调用的函数中。