我刚刚使用以下命令在我的 mac(arm)上安装了 go:
brew install go
然后我使用 Goland IDE 创建了一个新项目。当我使用
go run hello.go
运行时,它返回以下错误:
panic: go: internal error: missing go root module
goroutine 1 [running]:
cmd/go/internal/modload.mustHaveGoRoot(...)
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modload/buildlist.go:104
cmd/go/internal/modload.newRequirements(0xe0?, {0x14000080360?, 0x100f984e0?, 0x1400000e1f8?}, 0x120?)
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modload/buildlist.go:118 +0x59c
cmd/go/internal/modload.updatePrunedRoots({0x10106daf0, 0x1014511e0}, 0x14000196600, 0x140000202d0, {0x0, 0x0, 0x14000196600?}, {0x0, 0x0, 0x14000192c80?}, ...)
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modload/buildlist.go:1236 +0x9bc
cmd/go/internal/modload.updateRoots({0x10106daf0?, 0x1014511e0?}, 0x0?, 0x140000620d8?, {0x0?, 0x2?, 0x140000620d8?}, {0x0?, 0x14000075700?, 0x140000620e8?}, ...)
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modload/buildlist.go:796 +0x7c
cmd/go/internal/modload.loadModFile({0x10106daf0, 0x1014511e0}, 0x0)
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modload/init.go:964 +0x12cc
cmd/go/internal/modload.LoadModFile({0x10106daf0?, 0x1014511e0?})
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modload/init.go:793 +0x28
cmd/go/internal/modcmd.runDownload({0x10106daf0, 0x1014511e0}, 0x1400002c558?, {0x140000200e0, 0x0, 0x0})
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/internal/modcmd/download.go:120 +0x74
main.invoke(0x1013dcd00, {0x140000200c0, 0x3, 0x3})
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/main.go:257 +0x4d8
main.main()
/opt/homebrew/Cellar/go/1.22.1/libexec/src/cmd/go/main.go:175 +0x688
我尝试手动设置GOROOT或GOPATH,但错误仍然存在。错误消息要么是“modload.Requirements 中缺少 go 版本”,要么是“缺少 go 根模块。”
这是我的 hello.go 脚本:
package main
import "fmt"
func main() {
fmt.Println("hello, world!")
}
这是我的
go.mod
:
module go
go 1.22
问题是由于创建一个目录名为“go”的 Goland 项目而导致生成的模块也名为“go”。为了解决这个问题,我删除了
go.mod
文件并执行了go mod init hello
,成功解决了问题。
因此,解决方案很简单:重命名模块以避免使用“go”等保留关键字。这个简单的调整就解决了这个问题。
module go // <-- rename this to other name
go 1.22