go - 如何一次构建多个包二进制文件

标签 go

我在不同的地方看到过这个问题的讨论,答案如“使用 cmd/foo、cmd/bar”类型的文件夹结构。

这对我不起作用。

这个有效:

$ du -a
8   ./src/cmd/bin1/main.go
8   ./src/cmd/bin1
8   ./src/cmd/bin2/main.go
8   ./src/cmd/bin2
16  ./src/cmd
8   ./src/shared/foo/foo.go
8   ./src/shared/foo
8   ./src/shared
24  ./src

并构建它:

go build ./src/cmd/bin2
go build ./src/cmd/bin1

但是,我不知道什么变体:

go build ./src/...

我可能需要一步构建所有此类二进制文件。

这种布局:

$ du -a
8   ./cmd/bin1/main.go
8   ./cmd/bin1
8   ./cmd/bin2/main.go
8   ./cmd/bin2
16  ./cmd
8   ./src/shared/foo/foo.go
8   ./src/shared/foo
8   ./src/shared
8   ./src
24  .

似乎完全无法使用。 go build ... 命令的组合似乎无法构建 bin1 或 bin2。

我能得到的最好的是 go build cmd/bin1/main.go,它给我一个名为“main”的二进制文件。没有帮助。

那么,具体来说,包括 go build 命令在内,它实际上构建了各个二进制文件,你是怎么做到的?

...为什么人们不断给出的默认建议是使用顶级 cmd 文件夹?如果你这样做,你如何构建这些二进制文件?

最佳答案

如果您不想将二进制文件安装到 $GOPATH/bin 中,您可以像其他开源项目一样创建脚本。

大多数项目都有用于生成多个二进制文件的 make 文件和构建脚本。

在您的情况下,您可以构建一个脚本来遍历 cmd 中的包,然后在每个包上运行 go build

cd $GOPATH/someProject
for CMD in `ls cmd`; do
  go build ./cmd/$CMD
done

这导致:

[root@node1 test]# ls $GOPATH/someProject
bin1  bin2  cmd

您可以查看几个热门项目:

关于go - 如何一次构建多个包二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37680437/

相关文章:

JSON 响应 : return nested JSON

go - 使用 golang 将 DateTime 值插入 MS SQL

go - 如何区分关闭和过滤的远程端口

interface - 在 go 中输入不可知的 channel

sql - lib/pq 连接但查询因连接不良而失败

go - 尝试从Redis中的列表进行LPOP时类型错误的操作

http.Client 拒绝使用 >unsupported protocol scheme ""< 即使已设置的请求

cgo - 如何将字符串转换为 C 固定字符数组

其他语言的 Goroutine 类似物

bash - 以编程方式在 Heroku 中运行 bash 脚本文件