[英]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.