我可以拥有一个同名的库和二进制文件吗?

bea*_*mit 15 build go

我正在构建一个库,但我也希望它可以作为一个独立的二进制文件使用.

例如,假设我正在构建Tar的实现.Tar通常用作命令,但也可以用作库.直观地说,我会做这样的事情:

src/
    tar/
        tar.go # belongs to package tar
        main.go # imports tar and provides a main function
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.从文档中,似乎"命令"应该具有与库不同的名称.根据此示例调整示例,我有以下目录结构:

src/
    tar/
        tar.go # belongs to package tar
    tarbin/
        main.go # imports tar and provides a main function
Run Code Online (Sandbox Code Playgroud)

然而,这将创建一个名为命令tarbin,而不是tar$GOPATH/bin.我发现的解决方法是做go build -o $GOPATH/bin/tar tar,但我觉得我做的事情非常糟糕.有没有更好的办法?

注意:我很清楚它tar包含在标准库中,我只是以它为例.

Nic*_*ood 21

我可能会这样做

src/
    tar/
        tar.go         # tar libary
        tar/
            main.go    # tar binary
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个名为的二进制文件tar和一个名为的库tar

假设你在github上托管这个,那么你想要的

src/
    github.com/
        you/
            tar/
                tar.go         # tar libary
                tar/
                    main.go    # tar binary
Run Code Online (Sandbox Code Playgroud)

这将使你当你做一个二进制称为焦油go get install github.com/you/tar/tar和一个叫库github.com/you/tar,当你做go get install github.com/you/tar

根据您认为哪个更重要,您可以交换库和二进制文件

src/
    github.com/
        you/
            tar/
                main.go            # tar binary
                tar/
                    tar.go         # tar libary
Run Code Online (Sandbox Code Playgroud)

将所有代码保存在一个树中使您可以go install ./...从根目录构建所有包和子包,这是一个优势. go test|fmt ./...也.(注意,实际上是3个点!)