golang单git仓库多go包

  1. 1. 概述
  2. 2. 结构
  3. 3. 其他git库访问

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
)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wind.kaisa@gmail.com

💰

×

Help us with donation