Go Module本地依赖的两种玩法
Overview
两种情况
先看两种依赖关系,如下:
- 同一
module下的不同package依赖 - 不同
module下的不同package依赖
第一种情况,假设module名称是go_play,package分别是foo、bar、biz则依赖关系简单表示为:
第二种情况,假设两个module分别是go_play和go_play_another,新增的package是baz,则依赖关系简单表示为:
解决方案
情况一
第一种情况,目录结构如下:
1go_play
2├── bar
3│ └── bar.go
4├── biz
5│ └── biz.go
6├── foo
7│ └── foo.go
8├── go.mod
9├── play.go
10└── play_test.go
初始化module的方法是:
1go mod init go_play
按照图中的依赖关系,可以用module_name/package_name的方式import同一module下的其他package,例如在bar.go中可以是:
1package bar
2
3import (
4 "fmt"
5 _ "go_play/biz"
6)
7
8func init() {
9 fmt.Println("bar.....")
10}
此时,如果biz中有init函数则执行之。
情况二
第二种情况,新增module,其目录结构:
1go_play_another
2├── baz
3│ ├── baz.go
4│ └── baz_test.go
5└── go.mod
可以用同样的方法(module_name/package_name)import其他module下的package,但需要在go.mod中声明依赖:
1module go_play_another
2
3go 1.12
4
5require go_play v0.0.0
6
7replace go_play => ../go_play
这里的关键是replace后的内容,将一个共享的module替换成本地module所在的目录。