使用“go build”时如何解决“包不在GOROOT中”的问题?

我有以下简单的项目架构:

LICENSE     Makefile    README.md   cmd     docs

与目录内部(因为我想构建一个CLI工具)。我的生成文件包含:test/main.gocmd

test:
    gofmt -s -w cmd/test/
     go build cmd/test/ -o test

第一个命令工作正常,但会导致错误gofmtgo build

package cmd/test is not in GOROOT

正确的编译方法是什么?


杨魅力
浏览 118回答 1
1回答

POPMUISE

您应该能够使其与以下各项配合使用:go build -o ./test ./cmd/test/*.go这是因为 go 生成命令将导入路径列表或 .go 文件列表作为其参数。[packages]go build [-o output] [build flags] [packages]Build 编译按导入路径命名的 及其依赖项,但不安装结果。packages如果要生成的参数是来自单个目录的 .go 文件的列表,则生成会将它们视为指定单个包的源文件列表。...您的参数既不是导入路径,也不是 .go 文件的列表。cmd/test/如果你想从它的目录内容构建一个包,你可以使用,你的shell通常会用该目录中的.go文件条目列表替换它。./cmd/test/*.go但请注意,推荐的方法是使用 go 模块。对于模块,您可以通过指定其导入路径而不是目录的内容来构建软件包。例如,给定如下项目结构:program└── cmd    └── test        └── test.go您将从项目的根目录中:go mod initgo mod init program这将为您的项目创建一个新文件:go.modprogram├── cmd│   └── test│       └── test.go└── go.mod然后您可以使用其导入路径(根植于模块的路径)构建包,例如:go build -o ./test program/cmd/test
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go