我正在构建一个库,但我也希望它可以用作独立的二进制文件。
例如,假设我正在构建 Tar 的实现。 Tar 通常用作命令,但也可以用作库。直觉上,我会这样做:
src/
tar/
tar.go # belongs to package tar
main.go # imports tar and provides a main function
这似乎不起作用。来自 documentation ,似乎“命令”应该与库有一个单独的名称。将那里给出的示例改编为这个示例,我有以下目录结构:
src/
tar/
tar.go # belongs to package tar
tarbin/
main.go # imports tar and provides a main function
但是,这会创建一个名为 tarbin
的命令,而不是 $GOPATH/bin
中的 tar
。我发现的解决方法是执行 go build -o $GOPATH/bin/tar tar
,但我觉得我做错了什么。有没有更好的办法?
注意:我很清楚 tar
包含在标准库中,我只是将其用作示例。
最佳答案
我可能会这样做
src/
tar/
tar.go # tar libary
tar/
main.go # tar binary
这将为您提供一个名为 tar
的二进制文件和一个名为 tar
假设您将其托管在 github 上,那么您会想要
src/
github.com/
you/
tar/
tar.go # tar libary
tar/
main.go # tar binary
当你执行 go get install github.com/you/tar/tar
和一个名为 github.com/you/tar
的库时,它会给你一个名为 tar 的二进制文件> 当你这样做 去安装 github.com/you/tar
根据您认为哪个更重要,您可以交换库和二进制文件
src/
github.com/
you/
tar/
main.go # tar binary
tar/
tar.go # tar libary
将所有代码保存在一棵树中使您能够从根目录执行 go install ./...
以构建所有包和子包,这是一个优势。 go test|fmt ./...
也是。 (注意真的是3个点!)
https://stackoverflow.com/questions/14284375/