失败 - 预计 'package',发现 'EOF'

Go failing - expected 'package', found 'EOF'

我一直很难尝试在由 vagrant 提供支持的虚拟机中执行一个简单的 golang 程序。 这些是我的相关领域 go env:

GOARCH="amd64"
GOPATH="/usr/local/src/go"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"

这是我要执行的程序(位于 /usr/local/src/go/program ):

package program

import (
    "fmt"
)

func main() {
    fmt.Print("Aloha")
}

这,我得到的输出:

main.go:4:5:
/usr/local/go/src/fmt/doc.go:1:1: expected 'package', found 'EOF'
package runtime:
/usr/local/go/src/runtime/alg.go:1:1: expected 'package', found 'EOF'

考虑到这是一个完全伪造的程序。奇怪的是它完全可以在不同的环境中工作。 我在这里错过了什么?

非常感谢!

问题不在于 GOROOT 也不在于 GOPATH。 go 安装在某个时候失败了,导致整个过程不稳定(文件创建但完全是空的)。再次配置虚拟机时,go 模块检查文件是否存在。正如他们所做的那样,理所当然地认为安装已经发生。

清理并从头开始全新安装解决了问题。

这通常发生在您有文件时,例如foo_test.go 空或没有包声明。

对我来说,这也发生在使用 Atom + Go Plus + Terminal Plus 时。问题是前导括号不在 "correct" 行上。

注意:Go Plus 在保存时警告语法,但我在使用 VIM 在本地创建该文件后导入了该文件,因此我从未看到 lint错误...

错误:

package main
import "fmt"
func main() 
{
    fmt.Println("hello world")
}

正确:

package main
import "fmt"
func main() {
    fmt.Println("hello world")
}

作为一个新的 go 用户,我找到了这个答案,想找人告诉我我需要用 package main 启动我的脚本,尽管我的错误有点不同,

...expected 'package', found 'import'

现在很明显,但是,嘿,事情就是这样。

使用 VS Code for GO,遇到同样的问题。 在 Windows 上保存文件 'Ctrl+S' 解决了这个问题。

参考: Answered by Nico

正如 Nico 已经建议的那样,当您创建一个新项目和新的 main.go 文件时,如果文件未保存,则会出现此错误。保存文件 (ctrl + s),此错误将在 mac 和 windows 中消失。 我遇到了同样的问题,只是通过在 main.go 文件上执行 ctrl+S 来解决它。

一个单独的Go文件在同一个包中,没有"package main"声明 因此,控制台在 运行 主 GO 文件.

上给出 错误

在向另一个 Go 文件 提供 包主声明时,错误停止显示。

先保存文件然后 运行 cammand.it 开始工作。

去运行main.go

使用 gopls(撰写本文时为 v0.4.0,非常不稳定!)和 vscode 为我工作 cmd+shift+P > Go: Restart language server

在我的例子中,我是通过使用 "VS Code" 而不是 默认 " 文本编辑器来解决问题的"

问题是文件中存在一些额外的字符。一旦我们删除多余的字符,它就会起作用。

我希望它也能解决你。

我今天遇到了完全相同的问题,而 运行宁 golangvscode

错误

这通常发生在您不保存代码并且 运行 代码直接思考 IDE 就像 Intellij 为我们自动保存一样,但在 vscode 中您可以启用自动保存来避免这种情况一种错误并节省一些时间。

转到文件 -> 自动保存