為了方便自己開發,自己寫了個小工具:DzhGO 代碼生成工具
功能特點標題
- 初始化項目基礎結構
- 生成插件模塊代碼
- 生成模型和實體代碼
- 生成服務接口和實現代碼
- 支持 admin 和 app 兩種模塊類型
- 生成項目基礎目錄
具體介紹看倉庫:
https://github.com/gzdzh-cn/dzhcore/tree/master/dzhgo
因為要用到倉庫多模塊打標簽,以下是自己項目的操作實例和步驟
Go 多模塊倉庫標簽管理教程
目錄結構
dzhcore/ # 主倉庫根目錄
├── go.mod # 主模塊:module github.com/gzdzh-cn/dzhcore
├── main.go # 主模塊入口文件
├── core.go # 主模塊代碼
├── dzhgo/ # 子模塊目錄
│ ├── go.mod # 子模塊:module github.com/gzdzh-cn/dzhcore/dzhgo
│ ├── main.go # 子模塊入口文件
│ ├── cmd/ # 子模塊命令目錄
│ │ ├── root.go
│ │ └── ...
│ └── version/ # 版本信息
│ └── version.go
└── README.md
模塊配置
1. 主模塊 go.mod
module github.com/gzdzh-cn/dzhcorego 1.24.5require (github.com/gogf/gf/v2 v2.9.0// ... 其他依賴
)
2. 子模塊 go.mod
module github.com/gzdzh-cn/dzhcore/dzhgogo 1.24.5require github.com/gogf/gf/v2 v2.9.0
// ... 其他依賴
標簽管理策略
主倉庫標簽
- 格式:
v1.3.3
- 用途:標識主模塊
github.com/gzdzh-cn/dzhcore
的版本 - 安裝命令:
go install github.com/gzdzh-cn/dzhcore@v1.3.3
子模塊標簽
- 格式:
dzhgo/v1.3.3
- 用途:標識子模塊
github.com/gzdzh-cn/dzhcore/dzhgo
的版本 - 安裝命令:
go install github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3
操作步驟
1. 準備工作
# 確保在主倉庫根目錄
cd /path/to/dzhcore# 檢查當前狀態
git status
git remote -v
2. 創建主倉庫標簽
# 確保所有更改已提交
git add .
git commit -m "準備發布 v1.3.3"# 推送最新代碼
git push github master# 創建主倉庫標簽
git tag v1.3.3# 推送標簽到遠程
git push github v1.3.3
3. 創建子模塊標簽
# 創建子模塊標簽(在主倉庫根目錄)
git tag dzhgo/v1.3.3# 推送子模塊標簽到遠程
git push github dzhgo/v1.3.3
4. 驗證標簽
# 查看所有標簽
git tag -l# 查看標簽詳情
git show v1.3.3
git show dzhgo/v1.3.3# 查看標簽指向的 commit
git log --oneline v1.3.3
git log --oneline dzhgo/v1.3.3
調試和驗證
1. 檢查模塊配置
# 檢查主模塊 go.mod
head -1 go.mod
# 應該輸出:module github.com/gzdzh-cn/dzhcore# 檢查子模塊 go.mod
head -1 dzhgo/go.mod
# 應該輸出:module github.com/gzdzh-cn/dzhcore/dzhgo
2. 驗證標簽指向的內容
# 檢查標簽指向的 commit 下,子模塊 go.mod 內容
git show v1.3.3:dzhgo/go.mod | head -1
git show dzhgo/v1.3.3:dzhgo/go.mod | head -1# 檢查子模塊目錄結構
git show v1.3.3:dzhgo/
git show dzhgo/v1.3.3:dzhgo/
3. 測試 Go Proxy 收錄
# 等待幾分鐘讓 Go Proxy 同步,然后測試# 使用官方 Go Proxy 測試主模塊
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore# 使用官方 Go Proxy 測試子模塊
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore/dzhgo# 使用國內 Go Proxy 測試
go list -m -versions github.com/gzdzh-cn/dzhcore
go list -m -versions github.com/gzdzh-cn/dzhcore/dzhgo
4. 測試安裝命令
# 創建測試目錄
mkdir /tmp/gotest
cd /tmp/gotest# 測試主模塊安裝
go mod init gotest
go get github.com/gzdzh-cn/dzhcore@v1.3.3# 測試子模塊安裝
go install github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3# 驗證安裝
dzhgo --version
5. 調試常見問題
# 如果子模塊查不到版本,檢查標簽格式
git tag | grep dzhgo# 如果安裝失敗,檢查模塊路徑
curl https://proxy.golang.org/github.com/gzdzh-cn/dzhcore/dzhgo/@v/list# 強制刷新 Go Proxy 緩存
GOPROXY=https://proxy.golang.org go get -x github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3
完整操作示例
# 1. 準備發布
cd /path/to/dzhcore
git add .
git commit -m "發布 v1.3.3 版本"
git push github master# 2. 創建標簽
git tag v1.3.3
git tag dzhgo/v1.3.3
git push github v1.3.3
git push github dzhgo/v1.3.3# 3. 驗證標簽
git tag -l
git show v1.3.3:dzhgo/go.mod | head -1
git show dzhgo/v1.3.3:dzhgo/go.mod | head -1# 4. 等待 Go Proxy 同步(5-10分鐘)
sleep 300# 5. 測試版本查詢
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore/dzhgo# 6. 測試安裝
mkdir /tmp/gotest && cd /tmp/gotest
go mod init gotest
go install github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3
dzhgo --version
注意事項
-
標簽格式必須正確:
- 主模塊:
v1.3.3
- 子模塊:
dzhgo/v1.3.3
- 主模塊:
-
模塊路徑必須正確:
- 主模塊:
module github.com/gzdzh-cn/dzhcore
- 子模塊:
module github.com/gzdzh-cn/dzhcore/dzhgo
- 主模塊:
-
Go Proxy 同步有延遲:
- 官方 proxy.golang.org 通常幾分鐘內同步
- 國內 goproxy.cn 可能需要更長時間
-
倉庫必須是公開的:
- Go Proxy 只收錄公開倉庫的版本
-
測試時不要在本地模塊目錄:
- 不要在 dzhcore 或 dzhgo 目錄下測試 go get
- 使用全新空目錄測試
參考文檔
- Go Modules: Publishing multi-module repositories
- Go Modules: Module version numbering