失败 - 预期'包',发现'EOF'

时间:2015-06-29 07:36:50

标签: go package 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'

考虑到这是一个完全假的程序。奇怪的是它完全适用于不同的环境。 我在这里缺少什么?

非常感谢!

11 个答案:

答案 0 :(得分:22)

将GO代码用于GO,并面临同样的问题。 在Windows上保存文件“Ctrl + S”修复了问题。

参考: Answered by Nico

答案 1 :(得分:10)

当您拥有一个文件时,通常会发生这种情况。 foo_test.go为空或没有包装声明。

答案 2 :(得分:9)

问题不在于GOROOTGOPATH。 go安装在某些时候失败,使整个事情不稳定(文件已创建但完全为空)。再次配置虚拟机时,go模块检查文件是否存在。正如他们所做的那样,已经认定安装已经完成。

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

答案 3 :(得分:6)

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

答案 4 :(得分:3)

首先保存文件,然后运行cammand。它正在工作。

运行main.go

答案 5 :(得分:2)

对我来说,这也发生在使用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")
}

答案 6 :(得分:2)

我今天在 golang 中运行 vscode 时遇到了完全相同的问题。

enter image description here

错误

enter image description here

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

转到文件 -> 自动保存

答案 7 :(得分:0)

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

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

现在真的很明显,但是嘿,这就是它的原因。

答案 8 :(得分:0)

正如Nico所建议的那样,当您创建一个新项目和新的main.go文件时,如果不保存该文件,则会出现此错误。保存文件(ctrl + s),此错误将同时在Mac和Windows中消失。 我遇到了同样的问题,只需对main.go文件执行ctrl + S即可解决该问题。

答案 9 :(得分:0)

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

在向其他Go文件提供 package主声明时,错误停止显示。

答案 10 :(得分:0)

就我而言,我是通过使用“ VS代码” (而不是默认的“文本编辑器”

)解决了该问题

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

我希望它也会为您解决。