我一直在使用Go模块,我想知道以下目录结构的最佳实践是什么:
project
├── go.mod
├── main.go
└── players
├── go.mod
├── players.go
└── players_test.go
起初,我在将players
包导入根项目时遇到问题,但是我注意到我可以在根go.mod
文件中做到这一点
module github.com/<name>/<project>
require (
github.com/<name>/players v0.0.0
)
replace github.com/<name>/players => ./players
然后,我可以在自己的import "github.com/<name>/players"
文件中进行main.go
了。
现在这种方法可行并且取自here,但是我不确定这是否是正确的方法,或者该方法是否仅用于在版本控制之外临时更新本地包。
另一种看似有点过大的选择是使每个模块都有自己的存储库?
TL; DR; -在同一存储库中包含多个模块并将其导入其他模块/根main.go
文件中的最佳实践方法是什么?
答案 0 :(得分:3)
通常,模块应该是软件包的集合。
但是仍然可以创建单个软件包的模块。正如Volker所说,这仅在您希望这些程序包具有不同的生命周期时才有意义。当您想从另一个项目中导入这些模块,而又不想整个软件包集合的开销时,这也很有意义。
一般:
一个模块是一组相关的Go软件包的集合,这些版本一起作为一个单元进行版本控制。
模块记录精确的依赖要求并创建可复制的构建。
通常,版本控制存储库仅包含在存储库根目录中定义的一个模块。 (单个存储库中支持多个模块,但是通常,与每个存储库中的单个模块相比,这将导致持续不断的工作)。
总结存储库,模块和软件包之间的关系:
- 存储库包含一个或多个Go模块。
- 每个模块包含一个或多个Go软件包。
- 每个软件包都在一个目录中包含一个或多个Go源文件。
报价来源:https://github.com/golang/go/wiki/Modules#modules
您可以按照方法中显示的方式进行操作: