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

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

例如,假设我正在构建 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/

相关文章:

python - LLVM clang 的 CMake 构建失败并显示 "Unexpected fa

python - 使用 bitbake 在项目中加快构建时间的方法?

maven - 在maven中构建模块时如何构建依赖项目

xcode - 如何在 Xcode 4 的运行脚本构建阶段中使用 sudo?

ios - 无法运行 faSTLane 叹息。 "Couldn' t下载证书"

.net - 无法解析主要引用,因为它是针对比当前目标框架更高版本的 .NET 框架构建的

c++ - 在 CMake 中添加自定义构建步骤

maven - 在 Jenkins 中设置 Maven 参数

build - Gradle:如何为需要相同 Activity 但具有不同意图过滤器的不同 buil

build - 告诉 cmake 保持安静