Sharing a Name Between Libraries and Binaries in Go
When building a software package, you may desire a library and a standalone binary with the same name. This can be useful for tools like tar, which is used both as a command and a library.
Initially, you might attempt a simple directory structure:
src/ tar/ tar.go # belongs to package tar main.go # imports tar and provides a main function
However, this approach leads to a binary named "tarbin" instead of "tar." To resolve this, the Go documentation recommends separating the command and library into distinct directories:
src/ tar/ tar.go # belongs to package tar tarbin/ main.go # imports tar and provides a main function
While this produces a command named "tar," the library is now called "tarbin."
A more elegant solution is to nest the binary within the library directory:
src/ tar/ tar.go # tar library tar/ main.go # tar binary
This structure provides both a binary named "tar" and a library named "tar."
Depending on your priorities, you can swap the positions of the library and the binary within the nested structure.
Nestling all the code within a single tree offers benefits, such as running go install ./... from the root directory to build all packages and subpackages.
The above is the detailed content of How Can I Create a Go Binary and Library with the Same Name?. For more information, please follow other related articles on the PHP Chinese website!