失败 - 预期的“包”,发现“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】:

问题不在于GOROOTGOPATH。 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 致命:索引包失败

JSLint 错误:“预期在 EOF 处换行”,与 Beautify 插件冲突

v2rayng失败eof

从 Artifactory 安装 RPM 包

失败案例之安全抓包测试

存储过程错误“预期时遇到 EOF