Синтаксическая ошибка: оператор необъявления находится вне тела функции, но все, что есть, является объявлением - PullRequest
0 голосов
/ 30 июня 2019

Это не работает:

package main

var formatter string = "fmt"

import (
    formatter
)

func main() {
    fmt.Println(formatter)
}

Я получил: syntax error: non-declaration statement outside function body

Несмотря на то, что все есть декларация.

1 Ответ

3 голосов
/ 30 июня 2019

Согласно спецификации Go :

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

SourceFile       = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .

Это означает, что объявления верхнего уровня, такие как var formatter string = "fmt" , должны идти после любых объявлений импорта, если присутствуют какие-либо объявления импорта. Технически, вы получаете эту ошибку, потому что определение объявление не включает объявления импорта (несмотря на имя), а ваш исходный код имеет объявление импорта после объявления верхнего уровня, где объявление импорта не допускается.

Кроме того, в разделе Декларации импорта показано, что пути импорта должны быть строковыми литералами, поэтому даже если бы не проблема с упорядочением, вы все равно не смогли бы выполнить то, что пытаетесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...