在某個隨機文件夾中,有 3 個文件夾 a、b、c。每個文件夾都包含一個 mod 文件。mod 文件包含以下內容。go.mod 里面module ago 1.13b 內的 go.modmodule bgo 1.13require a v0.0.0replace a v0.0.0 => ./../ac 內的 go.modmodule cgo 1.13require b v0.0.0replace b v0.0.0 => ./../b模塊 b 沒有拋出任何錯誤。但模塊 c 拋出錯誤go: [email protected] [email protected]: unrecognized import path "a" (import path does not begin with hostname)每個模塊的模塊名稱中都必須有一個點(.)。“一些隨機文件夾”更改為 example.com?,F在 example.com 命名的文件夾包含所有 abc 文件夾。這是模塊現在的樣子模塊A看起來像module example.com/ago 1.13模塊 B 看起來像module example.com/bgo 1.13require example.com/a v0.0.0replace example.com/a v0.0.0 => ../a模塊 C 看起來像module example.com/cgo 1.13require example.com/b v0.0.0replace example.com/b v0.0.0 => ../b太糟糕了!錯誤!go: example.com/[email protected] requiresexample.com/[email protected]: unrecognized import path "example.com/a" (https fetch: Get https://example.com/a?go-get=1: dial tcp 208.73.210.202:443: connect: connection refused)本地模塊的傳遞依賴如何工作?為什么 Go 要訪問 example.com 來引入模塊?到底是怎么回事?
1 回答

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
Go Wiki:模塊:go.mod
exclude
指令replace
僅在當前(“主”)模塊上運行。構建主模塊時,將忽略主模塊以外的模塊中的指令exclude
。replace
因此, and語句允許主模塊完全控制其自己的replace
構建exclude
,而不受依賴項的完全控制。(
同樣在命令中:主模塊和構建列表:
主模塊的 go.mod 文件通過 require、replace 和 except 語句定義了可供 go 命令使用的精確包集。通過以下 require 語句找到的依賴模塊也有助于定義該組包,但只能通過其 go.mod 文件的 require 語句:依賴模塊中的任何替換和排除語句都將被忽略。因此,替換和排除語句允許主模塊完全控制其自己的構建,而不受依賴項的完全控制。
a
構建模塊時找不到包c
,因此該go
工具嘗試解決它,嘗試下載它。這就是為什么它嘗試將包名稱解釋為應以主機名開頭的名稱。
您不需要將包重命名a
為example.com/a
,但必須在s中添加一個replace
指令來告訴包所在的位置。c
go.mod
a
- 1 回答
- 0 關注
- 153 瀏覽
添加回答
舉報
0/150
提交
取消