25

这是允许的:

package main

var a = 3

...

但这不是:

package main

a := 3

...

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

4

3 回答 3

40

根据伊恩·兰斯·泰勒(Ian Lance Taylor)在公开声明后不久在此线程中的说法:

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

于 2013-09-17T16:04:05.183 回答
8

引用Go 编程语言规范

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

您可以在包级别考虑var类似consttype和的语句,func您必须指定要声明的语句类型。

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

于 2013-09-17T16:05:05.890 回答
3

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

这里。希望能帮助到你。

于 2015-03-02T18:52:34.590 回答