Почему не разрешено короткое объявление переменных на уровне пакета в Go?

Это разрешено:

package main

var a = 3

...

Но это не так:

package main

a := 3

...

Почему бы и нет? Почему не может быть обработано короткое объявление переменной вне функции регулярное объявление без типа? Просто для упрощения синтаксического анализа?

Ответы

Ответ 1

По словам Яна Лэнса Тейлора в этой теме вскоре после публичного объявления:

На верхнем уровне каждое объявление начинается с ключевого слова. Это упрощает синтаксический анализ.

Ответ 2

Для цитаты из Спецификация языка программирования Go:

Короткие объявления переменных могут отображаться только внутри функций. В некоторых контексты, такие как инициализаторы для "if", "for" или "switch", операторов, они могут использоваться для объявления локальных временных переменных.

Вы можете придумать инструкцию var, например const, type и func, на уровне пакета вы должны указать, какую декларацию вы объявляете.

Ну, это не реальная стенография, a, b := 12 не может скомпилировать, var a,b = 12 сделать.

Ответ 3

Вне функции каждое утверждение должно начинаться с ключевого слова (var, func и т.д.), поэтому конструкцию := недоступно.

Смотрите здесь. Надеюсь, что это поможет.