Ответ 1
По словам Яна Лэнса Тейлора в этой теме вскоре после публичного объявления:
На верхнем уровне каждое объявление начинается с ключевого слова. Это упрощает синтаксический анализ.
Это разрешено:
package main
var a = 3
...
Но это не так:
package main
a := 3
...
Почему бы и нет? Почему не может быть обработано короткое объявление переменной вне функции регулярное объявление без типа? Просто для упрощения синтаксического анализа?
По словам Яна Лэнса Тейлора в этой теме вскоре после публичного объявления:
На верхнем уровне каждое объявление начинается с ключевого слова. Это упрощает синтаксический анализ.
Для цитаты из Спецификация языка программирования Go:
Короткие объявления переменных могут отображаться только внутри функций. В некоторых контексты, такие как инициализаторы для "if", "for" или "switch", операторов, они могут использоваться для объявления локальных временных переменных.
Вы можете придумать инструкцию var
, например const
, type
и func
, на уровне пакета вы должны указать, какую декларацию вы объявляете.
Ну, это не реальная стенография, a, b := 12
не может скомпилировать, var a,b = 12
сделать.
Вне функции каждое утверждение должно начинаться с ключевого слова (var, func и т.д.), поэтому конструкцию :=
недоступно.
Смотрите здесь. Надеюсь, что это поможет.