Согласно спецификации Go :
Каждый исходный файл состоит из предложения пакета, определяющего пакет для
которому он принадлежит, за которым следует возможно пустой набор импорта
декларации, которые объявляют пакеты, содержимое которых оно желает использовать,
сопровождаемый возможно пустым набором объявлений функций, типов,
переменные и константы.
SourceFile = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
Это означает, что объявления верхнего уровня, такие как var formatter string = "fmt"
, должны идти после любых объявлений импорта, если присутствуют какие-либо объявления импорта. Технически, вы получаете эту ошибку, потому что определение объявление не включает объявления импорта (несмотря на имя), а ваш исходный код имеет объявление импорта после объявления верхнего уровня, где объявление импорта не допускается.
Кроме того, в разделе Декларации импорта показано, что пути импорта должны быть строковыми литералами, поэтому даже если бы не проблема с упорядочением, вы все равно не смогли бы выполнить то, что пытаетесь .