提问人:ThisIsErico 提问时间:6/29/2015 更新时间:5/15/2023 访问量:147746
失败 - 预期的“包”,找到“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'
考虑到这是一个完全虚假的程序。奇怪的是,它完全可以在不同的环境中工作。 我在这里错过了什么?
多谢!
答:
问题不在于既不 with 也不在于 .go 安装在某个时候失败了,使整个事情不稳定(文件已创建但完全为空)。再次置备虚拟机时,go 模块会检查文件是否存在。当他们这样做时,理所当然地认为安装已经进行。GOROOT
GOPATH
从头开始清理和全新安装解决了这个问题。
这通常发生在您有一个文件时,例如 foo_test.go 为空或没有包声明。
评论
对我来说,这也发生在使用 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")
}
作为一个新的 go 用户,我遇到了这个答案,希望有人告诉我,尽管我的错误有点不同,但我需要开始我的脚本,package main
...expected 'package', found 'import'
现在很明显了,但是嘿,事情就是这样。
使用 VS Code 进行 GO,并面临同样的问题。 在 Windows 上保存文件“Ctrl+S”解决了该问题。
参考 : Answer by Nico
评论
auto save
File --> Auto Save
正如 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
评论
Command 'Go: Restart Language Server' resulted in an error (command 'go.languageserver.restart' not found)
就我而言,我通过使用“VS Code”而不是默认的“文本编辑器”来解决问题
问题是文件中存在一些额外的字符。一旦我们删除多余的字符,它就会起作用。
我希望它也能解决你的问题。
我今天在跑步时遇到了完全相同的问题。golang
vscode
错误
这通常发生在您不保存代码并直接运行代码时,认为 IDE 就像 Intellij 为我们自动保存一样,但在 vscode 中,您可以启用自动保存以避免此类错误并节省一些时间。
转到文件 -> 自动保存
只要记住在运行程序之前按Ctrl保存,就可以开始了
就我而言,go.mod 也缓存了它的旧版本。导致文件无法自行保存。
在本地解决了冲突。并做了一个文件 -> 自动保存
如果在注释整个代码后按 Ctrl+S 时出现此问题,
只需取消注释行并按 Ctrl+S。 问题解决package <package_name>
就我而言,它是空文件。main.go
我有小型 http 服务器,文件结构如下:
├── cmd
│ └── server
│ └── main.go
└── internal
└── server
├── http.go
├── log.go
└── main.go <--- this one was empty
在运行服务器时,服务器引用了包,其原因是:。go run ./cmd/server/main.go
internal
expected 'package', found 'EOF'
删除已修复该问题。internal/server/main.go
上一个:如何在EOF之前读取用户输入?
下一个:在 C 代码中表示 EOF?
评论
package main
package main
EOF
go get