新的Go版本1.11引入了很棒的模块概念。
在documentation中,它表示go.mod
文件中可以使用四个指令:module
,require
,exclude
,{{1 }}。
它也说明:
排除和替换指令仅在当前(“主”)上运行 模块。在主模块以外的模块中排除和替换指令 构建主模块时,将忽略该模块。替换和 exclude语句,因此允许主模块完全控制 自己的构建,而无需受到 依赖性。
但是我仍然不了解replace
指令的工作原理。
有人可以向我解释exclude
指令的工作原理,并在可能的情况下举例说明何时使用它。
答案 0 :(得分:2)
这是一个半假设的假设示例:
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的完整建议。