新的 Go 1.11 版本引入了非常棒的模块概念。
在文档中它说有四个指令可以在go.mod文件中使用:module, require, exclude, replace.
它还解释说:
exclude 和 replace 指令仅在当前(“main”)模块上运行。构建主模块时,将忽略主模块以外的模块中的 exclude 和 replace 指令。因此,replace 和 exclude 语句允许主模块完全控制自己的构建,而不受依赖项的完全控制。
但我仍然不明白该exclude指令是如何工作的。
有人可以向我解释该exclude指令是如何工作的,如果可能,请举例说明何时使用它?
Coo*_*J86 10
这是一个半假设的假设示例:
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
Run Code Online (Sandbox Code Playgroud)
就github.com/SermoDigital/jose包而言,它有一个合适的 git 标签v0.9.1,但当前版本是v1.1,这不是一个合适的 git 标签(缺少“补丁”版本)。
通过排除正确版本化(但不工作)的代码,它会导致 go modmaster取而代之(它没有正确版本化,但具有工作代码)。
同样(并且真正假设),如果我有 .patch 的补丁github.com/google/uuid,我可以创建一个 fork 并使用它replace来获取我自己的版本,同时等待上游版本接受我的补丁(或不接受)。
| 归档时间: |
|
| 查看次数: |
9342 次 |
| 最近记录: |