同一项目中的多个模块

时间:2019-03-07 10:46:05

标签: go module

我一直在使用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文件中的最佳实践方法是什么?

1 个答案:

答案 0 :(得分:3)

通常,模块应该是软件包的集合。

但是仍然可以创建单个软件包的模块。正如Volker所说,这仅在您希望这些程序包具有不同的生命周期时才有意义。当您想从另一个项目中导入这些模块,而又不想整个软件包集合的开销时,这也很有意义。

一般:

  

一个模块是一组相关的Go软件包的集合,这些版本一起作为一个单元进行版本控制。

     

模块记录精确的依赖要求并创建可复制的构建。

     

通常,版本控制存储库仅包含在存储库根目录中定义的一个模块。 (单个存储库中支持多个模块,但是通常,与每个存储库中的单个模块相比,这将导致持续不断的工作)。

     

总结存储库,模块和软件包之间的关系:

     
      
  1. 存储库包含一个或多个Go模块。
  2.   
  3. 每个模块包含一个或多个Go软件包。
  4.   
  5. 每个软件包都在一个目录中包含一个或多个Go源文件。
  6.   

报价来源:https://github.com/golang/go/wiki/Modules#modules

要回答问题:

您可以按照方法中显示的方式进行操作: