golang单git仓库多go包 - Wed, Sep 9, 2020
golang单git仓库多go包
1. 概述
通常单git仓库构成一个go包,但是当微服务过多时,每个微服务拆分git仓库非常不便于管理,同时为了微服物解构,又每个为服务作为单个go包。
2. 结构
目录结构
.
├── apiserver
├── manager
│ ├── alarm
│ ├── user
│ ├── auth
│ ├── monitor
│ └── README.md
├── pkg
│ ├── config
│ ├── helper
│ └── models
├── README.md
└── scripts
apiserver作为http网关调用manager下的各个服务。 pkg下为manager服务下的共同组件包。
S1:在每个包下执行init,创建go.mod
go mod init
S2:在每个go.mod下使用replace替换路径
require (
...
)
replace (
github.com/kaisawind/monitor/manager/alarm => ../manager/alarm
github.com/kaisawind/monitor/manager/dga => ../manager/dga
github.com/kaisawind/monitor/manager/monitor => ../manager/monitor
github.com/kaisawind/monitor/pkg/config => ../pkg/config
github.com/kaisawind/monitor/pkg/helper => ../pkg/helper
github.com/kaisawind/monitor/pkg/models => ../pkg/models
)
- 注意包循环嵌套的问题,需要将嵌套的包放到pkg下面
3. 其他git库访问
当有其他git库的go需要访问时,还需要做额外的处理
由于go的版本是使用git的tag进行管理,所以当拆分包之后,tag也需要变化
git tag manager/alarm/v1.0.0
git tag manager/user/v1.0.0
git tag pkg/config/v1.0.0
git tag pkg/models/v1.0.0
当外部使用时,需要使用包的全路径
github.com/kaisawind/monitor/manager/alarm v1.0.0
另外,由于包内引用使用了相对路径,所以版本是v0.0.0-00010101000000-000000000000
,所以需要使用replae解决无版本的包的问题
require (
github.com/kaisawind/monitor/manager/alarm v1.0.0
)
replace (
github.com/kaisawind/monitor/pkg/helper => github.com/kaisawind/monitor/pkg/helper v1.0.0
)