失败 - 预期的“包”,发现“EOF”
Posted
技术标签:
【中文标题】失败 - 预期的“包”,发现“EOF”【英文标题】:Go failing - expected 'package', found 'EOF' 【发布时间】:2015-09-15 14:13:02 【问题描述】:我一直在尝试在由 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'
考虑到这是一个完全伪造的程序。奇怪的是,它完全可以在不同的环境中工作。 我在这里错过了什么?
非常感谢!
【问题讨论】:
你在调用 go run 之前保存了你的 program.go 源文件吗?使用package main
不是更好吗?
感谢您的回复!是的,package main
会更合适。这就是它过去的方式,并且以完全相同的错误失败。当然,文件已保存;)
是否存在某种 eol 错误(windows end of line 而不是 unix?)
也不是 :(
有趣...当然我收到了EOF
...文件确实是空的。 go get
执行似乎在某些时候失败了。
【参考方案1】:
使用 VS Code 进行 GO,遇到了同样的问题。 在 Windows 上保存文件 'Ctrl+S' 解决了这个问题。
参考: Answered by Nico
【讨论】:
也在 Ubuntu 上工作过! 也适用于 Mac OS 在 macOS 上为我解决了这个问题。现在我在 VS Code 中选择了auto save
以避免浪费时间......
谢谢。这适用于 Windows。【参考方案2】:
这通常发生在您有文件时,例如foo_test.go 为空或没有包声明。
【讨论】:
非常感谢。所有其他答案都不适合我,我也想不通。如此无用的错误消息。【参考方案3】:只需先保存文件,然后运行 cammand。它正在工作。
去运行 main.go
【讨论】:
每个开发者都会面临这个问题。运行前执行五次 cltr+s【参考方案4】:问题不在于GOROOT
和GOPATH
。 go 安装在某些时候失败,使整个事情不稳定(文件创建但完全为空)。再次配置虚拟机时,go 模块检查文件是否存在。正如他们所做的那样,安装已经进行是理所当然的。
从头开始清理和全新安装解决了这个问题。
【讨论】:
【参考方案5】:使用 gopls(在撰写本文时为 v0.4.0,非常不稳定!)和 vscode 执行 cmd+shift+P > Go: Restart language server
为我工作。
【讨论】:
您好,我已尝试过此解决方案,但导致错误Command 'Go: Restart Language Server' resulted in an error (command 'go.languageserver.restart' not found)
。知道为什么会这样吗?
其实没关系,只是我的环境变量配置不正确。我改变了路径,现在它可以工作了!
它不起作用但提出重新加载VSCode的想法,然后问题解决了。【参考方案6】:
我今天在vscode
中运行golang
时遇到了完全相同的问题。
错误
这通常发生在您不保存代码并直接运行代码时认为像 Intellij 这样的 IDE 会为我们自动保存,但在 vscode 中您可以启用自动保存以避免此类错误并节省一些时间。
转到文件 -> 自动保存
【讨论】:
【参考方案7】:对我来说,这也是在使用 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")
【讨论】:
【参考方案8】:一个单独的 Go 文件在同一个包中,没有“包主”声明 正因为如此,控制台在运行 Main GO 文件时给出了错误。
在向另一个 Go 文件提供 package main 声明时,错误停止显示。
【讨论】:
为什么不赞成?...如果对上述解决方案有疑问,请尝试将未声明的 .go 文件保留在同一包文件夹中。控制台标记“预期包,找到 EOF”错误(如上述问题所述) 这对我来说是个问题。这是一个如此简单的错过,但这条评论有帮助,谢谢。【参考方案9】:在我的情况下,我通过使用 "VS Code" 而不是默认的 "文本编辑器"
解决了这个问题问题是文件中存在一些额外的字符。一旦我们删除多余的字符,它就会起作用。
我希望它也能解决你。
【讨论】:
【参考方案10】:正如 Nico 已经建议的那样,当您创建一个新项目和新的 main.go 文件时,如果文件未保存,则会出现此错误。保存文件(ctrl + s),此错误将在 mac 和 windows 中消失。 我遇到了同样的问题,只是通过在 main.go 文件上执行 ctrl+S 解决了它。
【讨论】:
【参考方案11】:作为一个新的 go 用户,我遇到了这个答案,想找人告诉我我需要用 package main
开始我的脚本,尽管我的错误有点不同,
...expected 'package', found 'import'
现在真的很明显了,但是嘿,事情就是这样。
【讨论】:
以上是关于失败 - 预期的“包”,发现“EOF”的主要内容,如果未能解决你的问题,请参考以下文章
Git 克隆失败 - 致命:远程端意外挂断。致命:早期 EOF 致命:索引包失败