我一直很难尝试在由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'
考虑到这是一个完全假的程序。奇怪的是它完全适用于不同的环境。 我在这里缺少什么?
非常感谢!
答案 0 :(得分:22)
将GO代码用于GO,并面临同样的问题。 在Windows上保存文件“Ctrl + S”修复了问题。
参考: Answered by Nico
答案 1 :(得分:10)
当您拥有一个文件时,通常会发生这种情况。 foo_test.go为空或没有包装声明。
答案 2 :(得分:9)
问题不在于GOROOT
和GOPATH
。 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
时遇到了完全相同的问题。
错误
这通常发生在你不保存代码并直接运行代码时,像 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代码” (而不是默认的“文本编辑器”
)解决了该问题问题是文件中存在一些额外的字符。一旦我们删除了多余的字符,它将起作用。
我希望它也会为您解决。