语法错误:函数主体外的非声明语句,但所有内容都包含声明

时间:2019-06-30 03:03:30

标签: go

这不起作用:

```{r, collapse=TRUE}
library(tidyverse)
```

我得到了:package main var formatter string = "fmt" import ( formatter ) func main() { fmt.Println(formatter) }

即使所有内容都有声明。

1 个答案:

答案 0 :(得分:3)

根据Go specification

  

每个源文件都包含一个package子句,该子句定义了要   所属的字段,然后可能是空的导入集   声明,声明要使用其内容的包,   然后是一组可能为空的函数,类型的声明,   变量和常量。

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

这意味着诸如var formatter string = "fmt" 之类的顶级声明必须在所有导入声明之后 之后(如果存在)。从技术上讲,您会收到此错误,因为declaration的定义不包括导入声明(尽管有名称),并且您的源代码在顶级声明之后有一个导入声明,其中不允许导入声明成为。

此外,Import declarations section显示导入路径必须是字符串文字,因此即使不是针对订购问题,您仍然无法执行您要尝试的操作。