在某個隨機(jī)文件夾中,有 3 個文件夾 a、b、c。每個文件夾都包含一個 mod 文件。mod 文件包含以下內(nèi)容。go.mod 里面module ago 1.13b 內(nèi)的 go.modmodule bgo 1.13require a v0.0.0replace a v0.0.0 => ./../ac 內(nèi)的 go.modmodule cgo 1.13require b v0.0.0replace b v0.0.0 => ./../b模塊 b 沒有拋出任何錯誤。但模塊 c 拋出錯誤go: b@v0.0.0 requiresa@v0.0.0: unrecognized import path "a" (import path does not begin with hostname)每個模塊的模塊名稱中都必須有一個點(.)?!耙恍╇S機(jī)文件夾”更改為 example.com?,F(xiàn)在 example.com 命名的文件夾包含所有 abc 文件夾。這是模塊現(xiàn)在的樣子模塊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/b@v0.0.0 requiresexample.com/a@v0.0.0: 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貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊
Go Wiki:模塊:go.mod
exclude指令replace僅在當(dāng)前(“主”)模塊上運行。構(gòu)建主模塊時,將忽略主模塊以外的模塊中的指令exclude。replace因此, and語句允許主模塊完全控制其自己的replace構(gòu)建exclude,而不受依賴項的完全控制。(
同樣在命令中:主模塊和構(gòu)建列表:
主模塊的 go.mod 文件通過 require、replace 和 except 語句定義了可供 go 命令使用的精確包集。通過以下 require 語句找到的依賴模塊也有助于定義該組包,但只能通過其 go.mod 文件的 require 語句:依賴模塊中的任何替換和排除語句都將被忽略。因此,替換和排除語句允許主模塊完全控制其自己的構(gòu)建,而不受依賴項的完全控制。
a構(gòu)建模塊時找不到包c,因此該go工具嘗試解決它,嘗試下載它。這就是為什么它嘗試將包名稱解釋為應(yīng)以主機(jī)名開頭的名稱。
您不需要將包重命名a為example.com/a,但必須在s中添加一個replace指令來告訴包所在的位置。cgo.moda
- 1 回答
- 0 關(guān)注
- 178 瀏覽
添加回答
舉報
0/150
提交
取消
