go.mod文件中的exclude指令如何工作?

时间:2018-11-26 00:10:47

标签: go

新的Go版本1.11引入了很棒的模块概念。

documentation中,它表示go.mod文件中可以使用四个指令:modulerequireexclude,{{1 }}。

它也说明:

  

排除和替换指令仅在当前(“主”)上运行   模块。在主模块以外的模块中排除和替换指令   构建主模块时,将忽略该模块。替换和   exclude语句,因此允许主模块完全控制   自己的构建,而无需受到   依赖性。

但是我仍然不了解replace指令的工作原理。

有人可以向我解释exclude指令的工作原理,并在可能的情况下举例说明何时使用它。

2 个答案:

答案 0 :(得分:2)

这是一个半假设的假设示例:

go.mod

module github.com/example/project

require (
    github.com/SermoDigital/jose v0.0.0-20180104203859-803625baeddc
    github.com/google/uuid v1.1.0
)

exclude github.com/SermoDigital/jose v0.9.1

replace github.com/google/uuid v1.1.0 => git.coolaj86.com/coolaj86/uuid.go v1.1.1

排除

对于github.com/SermoDigital/jose软件包,它具有用于v0.9.1的适当git标签,但当前版本为v1.1适当的git标签(缺少“补丁”版本)。

通过排除损坏的版本,它会导致go mod从master获取。

替换

同样(实际上是假设的),如果我有github.com/google/uuid的补丁程序,则可以创建一个fork并使用replace获取自己的版本,同时等待上游版本接受我的补丁程序(或没有)。

答案 1 :(得分:0)

阅读整个Modules文档。在报价单的最下方,

  

...构建中的顶级模块可以排除特定版本的   依赖项或使用其他代码替换其他模块。见   more details and rationale的完整建议。