我有以下檔案:
$GOPATH/src/example.com
├── a
│ ├── a.go
│ └── go.mod
├── b
│ ├── b.go
│ └── go.mod
└── c
├── go.mod
└── main.go
內容是:
a/a.go :
package a
func NewA() int {
return 1
}
a/go.mod :
module example.com/a
go 1.17
b/b.go :
package b
import A "example.com/a"
func NewB() int {
return A.NewA()
}
b/go.mod :
module example.com/b
go 1.17
replace example.com/a => ../a
require example.com/a v0.0.0-00010101000000-000000000000 // indirect
c/main.go :
package main
import "fmt"
import B "example.com/b"
func main() {
fmt.Println(B.NewB())
}
c/go.mod :
module example.com/c
go 1.17
replace example.com/b => ../b
require example.com/b v0.0.0-00010101000000-000000000000 // indirect
當go run main.go在c我得到目錄:
../b/b.go:3:8: missing go.sum entry for module providing package example.com/a (imported by example.com/b); to add:
go get example.com/b@v0.0.0-00010101000000-000000000000
并go get example.com/[email protected]說:
go: downloading example.com/a v0.0.0-00010101000000-000000000000
example.com/b imports
example.com/a: unrecognized import path "example.com/a": reading https://example.com/a?go-get=1: 404 Not Found
可以肯定的是,這是一個本地包,在互聯網上不可用,它replace在所有必要的go.mod檔案中使用。
如何使用本地包?
如果我重命名example.com為example: missing dot in first path element。
uj5u.com熱心網友回復:
引自Go Modules Reference:replace指令:
replace指令僅適用于主模塊的go.mod檔案,在其他模塊中被忽略。有關詳細資訊,請參閱最小版本選擇。
當您構建主包/模塊時,replace指令 inb/go.mod無效。您必須將該replace指令添加到主模塊的go.mod.
所以將其添加到c/go.mod. 運行后go mod tidy的在c檔案夾中,它會是這樣的:
module example.com/c
go 1.17
replace example.com/b => ../b
replace example.com/a => ../a
require example.com/b v0.0.0-00010101000000-000000000000
require example.com/a v0.0.0-00010101000000-000000000000 // indirect
如果沒有這個replace,c/go.mod你會看到錯誤訊息,因為 go 工具試圖從example.com(這是一個現有域)獲取包,但它不包含 go 模塊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358308.html
