[英]How the exclude directive works in the go.mod file?
新的 Go 1.11 版本引入了非常棒的模块概念。
在文档中它说有四个指令可以在go.mod
文件中使用: module
、 require
、 exclude
、 replace
。
它还解释说:
exclude 和 replace 指令仅在当前(“main”)模块上运行。 构建主模块时,将忽略主模块以外的模块中的 exclude 和 replace 指令。 因此,replace 和 exclude 语句允许主模块完全控制自己的构建,而不受依赖项的完全控制。
但我仍然不明白exclude
指令是如何工作的。
有人可以向我解释exclude
指令是如何工作的,如果可能,请举例说明何时使用它?
这是一个半假设的假设示例:
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
来获取我自己的版本,同时等待上游版本接受我的补丁(或不接受)。
阅读整个模块文档。 在您的报价文件中的进一步下方,
...构建中的顶级模块可以排除特定版本的依赖项或用不同的代码替换其他模块。 有关更多详细信息和理由,请参阅完整提案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.