失败 - 预期的“包”,找到“EOF”

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

提问人:ThisIsErico 提问时间:6/29/2015 更新时间:5/15/2023 访问量:147746

问:

我一直很难尝试在由 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'

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

多谢!

EOF

评论

49赞 VonC 6/29/2015
在调用 go run 之前,您是否保存了 program.go 源文件?它不是更好吗?package main
0赞 ThisIsErico 6/29/2015
感谢您的回复!是的,会更合适。过去就是这样,并且以完全相同的错误失败。当然,文件被保存;)package main
0赞 VonC 6/29/2015
是否存在某种 eol 错误(Windows 行尾而不是 unix?
0赞 ThisIsErico 6/29/2015
其实也不是:(
0赞 ThisIsErico 6/29/2015
有趣。。。当然,我得到了一个......文件确实是空的。执行似乎在某个时候失败了。EOFgo get

答:

15赞 ThisIsErico 6/29/2015 #1

问题不在于既不 with 也不在于 .go 安装在某个时候失败了,使整个事情不稳定(文件已创建但完全为空)。再次置备虚拟机时,go 模块会检查文件是否存在。当他们这样做时,理所当然地认为安装已经进行。GOROOTGOPATH

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

33赞 Alessandro Resta 8/7/2016 #2

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

评论

1赞 Alf Moh 8/8/2020
非常感谢。所有其他答案都不适合我,我也无法弄清楚这一点。这样一个无用的错误消息。
3赞 tdensmore 2/28/2017 #3

对我来说,这也发生在使用 Atom + Go Plus + Terminal Plus 时。问题在于前导括号不在“正确”线上。

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

错误:

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

正确:

package main
import "fmt"
func main() {
    fmt.Println("hello world")
}
-2赞 kpie 7/5/2017 #4

作为一个新的 go 用户,我遇到了这个答案,希望有人告诉我,尽管我的错误有点不同,但我需要开始我的脚本,package main

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

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

152赞 Code_Yoga 3/2/2018 #5

使用 VS Code 进行 GO,并面临同样的问题。 在 Windows 上保存文件“Ctrl+S”解决了该问题。

参考 : Answer by Nico

评论

1赞 Ambareesh 12/15/2019
也曾在 Ubuntu 上工作过!
2赞 Hamza Khan 8/29/2020
也适用于Mac OS
2赞 rustyMagnet 2/12/2021
这在macOS上为我解决了这个问题。现在我在 VS Code 中选择了以避免浪费时间......auto save
1赞 PravinY 12/13/2021
谢谢。这在 Windows 上有效。
0赞 Taba 6/18/2022
无需搜索“如何在 VSCode 中打开自动保存”。它在 .单击它,激活后,您会在它旁边看到一个复选标记。File --> Auto Save
0赞 sonu1986 12/27/2018 #6

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

5赞 srt111 8/18/2019 #7

同一包中的单独 Go 文件没有“package main”声明,因此控制台在运行主 GO 文件时出现错误

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

评论

0赞 srt111 8/19/2019
为什么投反对票?...如果对上述解决方案有疑问,请尝试将未声明的 .go 文件保留在同一个包文件夹中。控制台标记“预期包,发现 EOF”错误(如上述问题中所述)
1赞 Manny T 12/12/2019
这是我的问题。这是一个如此简单的错过,但这个评论有所帮助,谢谢。
27赞 Javed 9/23/2019 #8

只需先保存文件,然后运行 cammand.it 即可正常工作。

去运行main.go

评论

4赞 Vyas Reddy 9/23/2019
每个开发人员都面临这个问题。运行前执行 cltr+s 五次
11赞 Luca 4/21/2020 #9

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

评论

0赞 Lou 6/21/2020
嗨,我尝试了这个解决方案,它导致了错误。知道为什么会这样吗?Command 'Go: Restart Language Server' resulted in an error (command 'go.languageserver.restart' not found)
1赞 Lou 6/21/2020
实际上没关系,事实证明我的环境变量配置不正确。我改变了路径,现在它起作用了!
0赞 M. Rostami 12/10/2020
它不起作用,但给出了一个重新加载 VSCode 的想法,然后问题就解决了。
1赞 Muthulakshmi M 10/29/2020 #10

就我而言,我通过使用“VS Code”而不是默认的“文本编辑器”来解决问题

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

我希望它也能解决你的问题。

10赞 kris 5/24/2021 #11

我今天在跑步时遇到了完全相同的问题。golangvscode

enter image description here

错误

enter image description here

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

转到文件 -> 自动保存

0赞 Abubakar Ijaz 6/21/2022 #12

只要记住在运行程序之前按Ctrl保存,就可以开始了

2赞 sumitya 11/21/2022 #13

就我而言,go.mod 也缓存了它的旧版本。导致文件无法自行保存。

在本地解决了冲突。并做了一个文件 -> 自动保存

2赞 karthikeyan 12/29/2022 #14

如果在注释整个代码后按 Ctrl+S 时出现此问题, 只需取消注释行并按 Ctrl+S。 问题解决package <package_name>

0赞 zooblin 5/15/2023 #15

就我而言,它是空文件。main.go

我有小型 http 服务器,文件结构如下:

├── cmd
│   └── server
│       └── main.go
└── internal
    └── server
        ├── http.go
        ├── log.go
        └── main.go  <--- this one was empty

在运行服务器时,服务器引用了包,其原因是:。go run ./cmd/server/main.gointernalexpected 'package', found 'EOF'

删除已修复该问题。internal/server/main.go