go - fmt.Println 必须在 Go 中的函数内吗?
问题描述
fmt.Println
需要总是属于一个函数吗?
以前使用过 Python 并且它允许它,但在研究中,Java 似乎没有
fmt.Println("can I do it?")
回报:
语法错误:函数体外的非声明语句
解决方案
它可能在函数之外,请参见以下示例:
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()
,您可以像这样使用空白标识符:
var _, _ = fmt.Println("I can do it")
它不能独立存在于顶级“介于”顶级声明之间,但上面的变量声明(带有空白标识符)几乎可以实现相同的效果。
每个源文件都包含一个包子句,定义它所属的包,然后是一组可能为空的导入声明,用于声明它希望使用其内容的包,然后是一组可能为空的函数、类型、变量声明,和常数。
SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
显然,包子句或导入声明不能包含fmt.Println()
调用,并且顶级声明:
Declaration = ConstDecl | TypeDecl | VarDecl . TopLevelDecl = Declaration | FunctionDecl | MethodDecl .
常量声明不能包含调用fmt.Println()
,这不是常量表达式。类型声明也不能包含函数调用。
变量声明可以,如答案顶部的示例所示。
函数和方法声明也可以调用fmt.Println()
,但您特别询问是否fmt.Println()
可以在它们之外调用。
因此,在顶层允许的函数之外唯一允许的地方是在变量声明中。
推荐阅读
- python - 将所有类属性视为字典
- python - 打包的 dags - Airflow 找不到已安装的模块
- python - Revit,使用 Python,无法获取族的族“类型名称”,只有 ID
- python - 使用不同的设置运行相同的 pytest
- regex - 正则表达式 - 将 URL 转换为可点击链接
- c - 加载和使用资源 C
- python - 使用 Alembic 时如何解决“sqlalchemy.exc.OperationalError”
- python - Python时间复杂度
- java - 这是使用 OpenGL 渲染图块的有效方法吗?
- python - 从“国家”列中删除多余的单词