为什么不是';Go中是否允许在包级别进行短变量声明?

为什么不是';Go中是否允许在包级别进行短变量声明?,go,Go,这是允许的: package main var a = 3 ... 但这不是: package main a := 3 ... 为什么不呢?为什么函数外的短变量声明不能被视为没有类型的常规声明?只是为了简化解析?根据Ian Lance Taylor在发布公告后不久所说: 在顶层,每个声明都以关键字开头。这简化了解析 引自: 短变量声明只能出现在函数内部。在某些方面 上下文,例如“if”、“for”或“switch”的初始值设定项 语句,它们可用于声明局部临时变量 您可以考虑var语句

这是允许的:

package main

var a = 3

...
但这不是:

package main

a := 3

...

为什么不呢?为什么函数外的短变量声明不能被视为没有类型的常规声明?只是为了简化解析?

根据Ian Lance Taylor在发布公告后不久所说:

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

引自:

短变量声明只能出现在函数内部。在某些方面 上下文,例如“if”、“for”或“switch”的初始值设定项 语句,它们可用于声明局部临时变量

您可以考虑
var
语句,如
const
type
、和
func
,在包级别,您必须指定要声明的语句类型


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

在函数外部,每个语句必须以关键字(var、func等)开头,因此
:=
构造不可用


看。希望能有所帮助。

Hi@Matt,我只是好奇,你编辑我答案的原因是什么?你能分享一下你的反馈吗?这样我将来可以改进我的答案。谢谢。关于这对解析有什么帮助,有什么解释吗?不过,没有解释为什么以及它是如何简化解析的。。。