使用模块跟踪依赖关系的Go项目的软件包布局?

时间:2018-11-12 21:55:23

标签: go package

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

在传统的$GOPATH模式下,我将组织以下应用程序:

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

这是我在GitHub上看到的大多数项目的事情。

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

1 个答案:

答案 0 :(得分:2)

From the wiki

  

模块是一组相关的Go软件包的集合,这些版本一起作为一个单元进行了版本控制。通常,单个版本控制存储库与一个模块完全对应,但是,另一个版本控制存储库可以容纳多个模块。

因此,将go.mod放在.git旁边(或等效于某些其他VCS)几乎总是正确的做法。如果每个模块中的代码确实独立于其他模块,则只能在一个存储库中创建多个模块,以使一个模块的版本不会以任何方式影响其他模块。