go module模式调用本地包
一、本地有两个package
1、目录结构
--demo
--p1
--p11
--p11.go
--main.go
--go.mod
--p2
--p2.go
--go.mod
2、p2.go源码
package p2
import "fmt"
const Name ="bob"
// New 首字母大写,供外部调用
func New() {
fmt.Println("p2 new")
}
3、p11.go源码
package p11
import ("fmt"
"p2"
)
// do 外部调用
func Do() {
fmt.Println("p11 Do Do")
fmt.Println(p2.Name)
}
4、main.go源码
package main
import ("fmt"
"p1/p11"
"p2"
)
func main() {
fmt.Println("main")
p11.Do()
p2.New()
}
二、p1,p2,p11之间的关系
p1,p2是两个不同的项目
P1,p11同一项目
三、要求p1的main.go调用p2 package中的方法
因为p1,p2不再同一项目下,所以有各自的go.mod文件,使用replace和require方法
replace的方法就是告诉 “项目中引用的依赖包所在的本地实际位置”
1、p1的go.mod文件内容
module p1
go 1.14
require p2 v0.0.0
replace p2 => ../p2
2、p2的go.mod文件内容
module p2
go 1.14
四、p1调用p11包内的方法
无需对p1的go.mod文件修改,在main函数中调用的时候,注意路径是“项目/包”的结构即可
五、p11调用p2中的方法/常量/变量
就跟p1调用p2中的方法一样,因为p11是p1的包内文件,整个p1文件夹(或称为项目)的包依赖都是有项目的根目录下的go.mod管理。