小编典典

我可以使用同名的库和二进制文件吗?

go

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

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

src/
    tar/
        tar.go # belongs to package tar
        main.go # imports tar and provides a main function

不过,这似乎不起作用。从文档中看来,“命令”应该具有与库不同的名称。使此处给出的示例适应此示例,我具有以下目录结构:

src/
    tar/
        tar.go # belongs to package tar
    tarbin/
        main.go # imports tar and provides a main function

但是,这会创建一个名为的命令tarbin,而不是tar中的命令$GOPATH/bin。我发现的解决方法是执行go build -o $GOPATH/bin/tar tar,但是我感觉到自己在做错误的事情。有没有更好的办法?

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


阅读 285

收藏
2020-07-02

共1个答案

小编典典

我可能会这样做

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

当您执行此操作时,将为您提供一个名为tar的二进制文件,当您执行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

将所有代码保存在一棵树中,使您能够go install ./...从根本上构建所有软件包和子软件包,这是一个优势。 go test|fmt ./...也。(请注意,实际上是3点!)

2020-07-02