Go 项目中出现“package XXX is not in GOROOT”错误
当尝试构建或运行 Go 项目并遇到以下场景时,经常会出现此错误:
-
该项目的结构如下如下:
src/
|--project
|--game
|--entity
|--whatever.go
|--game_stuff.go
|--server
登录后复制
- GOROOT 设置为正确的路径(例如 C:Go)。
原因
在 Go 的最新版本中(1.13 后),不再需要设置 GOPATH 和 GOBIN 等环境变量。相反,项目的根目录应包含一个 go.mod 文件,该文件将其表示为 Go 模块。
解决方案
要解决此问题,请按照以下步骤操作:
-
创建go.mod文件:在项目根目录下,运行go mod init [remote-repo.com/username/repository].
-
定义主包: 在 go.mod 文件中,指定主包的包路径(例如 github.com) /yourname/calculatorv3) 及其主文件(例如 main.go)。
-
删除过时的环境变量:如果您之前设置了 GOPATH 和 GOBIN,请从环境配置中删除或注释掉这些行。
-
重新构建或运行项目:重新运行 go build 或go run 命令,现在将正确识别项目的结构并构建或运行适当的package.
示例
对于提供的示例项目结构:
-
在项目根目录中创建一个 go.mod 文件并包含以下内容:
module github.com/myorg/myproject
go 1.17
require (
github.com/myorg/gameutils v1.2.3
)
登录后复制
- 确保 main.go 位于project/server 目录。
-
删除或注释掉过时的环境变量:
# GOPATH=$HOME/go # Assuming previous GOPATH setting
登录后复制
- 重新运行 go build -o server project/server 来构建项目。
附加说明
- 如果项目使用外部软件包,请确保使用 go get 或 go mod tidy 安装它们。
- 如果错误仍然存在,请尝试使用 go clean -modcache 清除 Go 缓存。
以上是为什么我的 Go 项目出现'package XXX is not in GOROOT”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!