【问题标题】:Package layout for Go projects using modules to track dependencies?使用模块跟踪依赖项的 Go 项目的包布局?
【发布时间】:2018-11-13 08:38:29
【问题描述】:

Go 现在提供 modules 用于依赖管理,我对如何组织我的项目有点困惑。

在传统的$GOPATH 模式下,我会按如下方式组织应用程序:

├─ cmd/
|  └─ myapp/
|     └─ main.go
├─ otherstuff/
|  └─ file.go
└─ README.md, etc.

这是我在 GitHub 上看到的大多数项目所做的。

但是,既然我们有了模块,我不确定将go.mod 放在哪里。它是否在项目的根目录中?它进入cmd/[whatever]/ 吗?我应该仍然将main.go 放在cmd/[whatever] 目录中,还是现在应该放在项目的根目录中?

【问题讨论】:

  • cmd/myapp 和其他关于版本控制的关系是什么?如果它们总是一起版本化,则将 go.mod 放在 repo 的根目录中。如果没有,请将 go.mod 放入每个包中。这将需要更多的努力来维护。阻力最小的路径是根目录下的 go.mod。

标签: go package


【解决方案1】:

From the wiki:

模块是相关 Go 包的集合,它们作为一个单元一起进行版本控制。大多数情况下,单个版本控制存储库与单个模块完全对应,但或者,单个版本控制存储库可以包含多个模块。

所以将go.mod 放在.git 旁边(或其他一些VCS 的等价物)几乎总是正确的做法。如果每个模块中的代码真正独立于其他模块,那么您只会在单个存储库中创建多个模块,这样一个模块的版本不会以任何方式影响其他模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多