引用模块没有任何硬性要求,尽管使用 domain/repo 模式总是很好的做法。所以,如果你想在本地引用其他不在 GOPATH 中的模块,你可以使用该replace
指令。
https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive
replace 也可用于通知 go tooling 多模块项目中模块的相对或绝对磁盘位置,例如:
替换 example.com/project/foo => ../foo
假设我们有以下结构:
├── .gitignore
├── pkg1
│ ├── go.mod
│ └── main.go
└── pkg2
├── go.mod
└── utils.go
pkg1/main.go
package main
import (
"fmt"
"local/pkg2"
)
func main() {
fmt.Println(pkg2.Add(1, 2))
}
pkg1/go.mod
module local/pkg1
go 1.12
require local/pkg2 v0.0.0
replace local/pkg2 => ../pkg2
pkg2/utils.go
package pkg2
func Add(a, b int) int {
return a + b
}
pkg2/go.mod
module local/pkg2
go 1.12
跑步:
cd pkg1
go run main.go
你得到:
3