为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨魅力 2022-08-24 16:57:19
我有以下简单的项目架构:LICENSE     Makefile    README.md   cmd     docs与目录内部(因为我想构建一个CLI工具)。我的生成文件包含:test/main.gocmdtest:     gofmt -s -w cmd/test/      go build cmd/test/ -o test第一个命令工作正常,但会导致错误gofmtgo buildpackage cmd/test is not in GOROOT正确的编译方法是什么?
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

您应该能够使其与以下各项配合使用:


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 init


go mod init program

这将为您的项目创建一个新文件:go.mod


program

├── cmd

│   └── test

│       └── test.go

└── go.mod

然后您可以使用其导入路径(根植于模块的路径)构建包,例如:


go build -o ./test program/cmd/test


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号