场景需求
假设当前同一个项目中有多个模块,每个模块有单独的go.mo, 结构如下所示:
├── package1
│ ├── go.mod
│ └── main.go
└── package2
├── go.mod
├── hello
│ └── hello.go
└── package2.go
- package2包相关代码
// package2/package2.go
package package2
import "fmt"
func New(){
fmt.Println("package2.New")
}
// package2/hello/hello.go
package hello
import "fmt"
func New2(){
fmt.Println("package2.hello.New2")
}
// package2/go.mod
module package2
go 1.14
如果package1中的main.go需要导入package2的package2.go或hello/hello.go, 应该怎么实现呢?
package1相关代码
// package1/main.go
package main
import (
"fmt"
"package2"
"package2/hello"
)
func main() {
package2.New()
hello.New2()
fmt.Println("package1.main")
}
module package1
go 1.14
require "package2" v0.0.0
replace "package2" => "../package2"
测试结果
$ cd package1
$ go run main.go
package2.New
package2.hello.New2
package1.main
关键点在于package1/go.mod中的
require "package2" v0.0.0 // 表示依赖package2包
replace "package2" => "../package2" // package2包替换为本地路径相对目录所在的包