代码之家  ›  专栏  ›  技术社区  ›  KelvinS Karel Petranek

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

go
  •  0
  • KelvinS Karel Petranek  · 技术社区  · 7 年前

    documentation 它说有四个指令可以在一个应用程序中使用 go.mod 文件: module , require exclude replace

    它还解释说:

    exclude和replace指令仅在当前(主)上运行 在构建主模块时忽略模块。替换和 因此,exclude语句允许主模块完成控制 在其自身构建上,也不受 依赖关系。

    但我还是不明白 排除 指令起作用。

    有人能给我解释一下 排除 指令起作用,如果可能,请举例说明何时使用它?

    2 回复  |  直到 7 年前
        1
  •  10
  •   coolaj86    6 年前

    下面是一个半假设的例子:

    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 ,但当前版本是 v1.1 正确的git标记(缺少“补丁”版本)。

    通过排除正确版本控制(但不工作)的代码,它会导致go mod从中获取 master 取而代之的是(它没有正确的版本控制,但是有工作代码)。

    代替

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

        2
  •  -2
  •   peterSO    7 年前

    通读 Modules

    ... 构建中的顶级模块可以排除特定版本的 more details and rationale .