你如何编写一个包含多个二进制文件的包?
问题描述:
我已经在各个地方看到过这个讨论,例如'使用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
中,则可以执行其他开源项目所做的操作,即创建脚本。
在那里的大多数项目已经生成文件和生成多个二进制文件的脚本。
对于您的情况,您可以构建一个脚本,遍历cmd
中的包,并在每个包上运行go build
。
cd $GOPATH/someProject
for CMD in `ls cmd`; do
go build ./cmd/$CMD
done
这导致:
[[email protected] test]# ls $GOPATH/someProject
bin1 bin2 cmd
夫妇趋势,你可以看一下项目:
答
命令:
go install ./...
应该建立自己的当前目录(即./...
)下的所有的二进制文件,并把它们放在$GOPATH/bin
。
答
从go build
帮助:
当编译多个包或单一非主包, 构建编译软件包,但丢弃所产生的对象, 仅作为检查套餐可建。
为了构建目录下的所有包,您可以运行go install ./...
。所有的软件包都将被构建和安装(即放在$ GOPATH/bin下)。
你的榜样,你有两个可执行文件生成:$GOPATH/bin/bin1
和$GOPATH/bin/bin2
还有写一个简单的Makefile做你想要什么样的选择。
查看'https:// github.com/spf13/cobra',你会将它指向'cmd/main.go',其他命令源文件将被用作例如。 '主要的doX''主要的printY' – Plato
你可以添加带有眼镜蛇的子命令,但它不会像预期的那样产生多个二进制文件。 –