为什么Go中的包级别不允许使用短变量声明?

Tre*_*xon 20 go

这是允许的:

package main

var a = 3

...
Run Code Online (Sandbox Code Playgroud)

但这不是:

package main

a := 3

...
Run Code Online (Sandbox Code Playgroud)

为什么不?为什么函数外部的短变量声明不能在没有类型的情况下处理常规声明?只是为了简化解析?

Gus*_*yer 34

公开宣布后不久,Ian Lance Taylor在这个帖子中说:

在顶层,每个声明都以关键字开头.这简化了解析.

  • 有没有关于这如何帮助解析的任何解释? (2认同)

tar*_*lah 6

引用Go Go编程语言规范:

简短变量声明可能仅出现在函数内部.在某些上下文中,例如"if","for"或"switch"语句的初始化程序,它们可用于声明本地临时变量.

你可以把var喜欢的语句const,type以及func,你必须指定什么样的您声明语句的包级别.

好吧,这不是一个真正的速记, a, b := 12无法编译,var a,b = 12做.