103 lines
2.1 KiB
Go
103 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// 处理单个 pb.go 文件,去掉 ,omitempty
|
|
func handleFile(path string) error {
|
|
fmt.Println("正在处理文件:", path)
|
|
content, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 去掉 ,omitempty 标签
|
|
newContent := strings.ReplaceAll(string(content), ",omitempty", "")
|
|
|
|
return os.WriteFile(path, []byte(newContent), 0644)
|
|
}
|
|
|
|
// 查找 biz/model 目录及其子目录下最新的 .pb.go 文件,忽略 biz/model/api
|
|
func findLatestPBGoFile(root string) (string, error) {
|
|
var latestFile string
|
|
var latestTime time.Time
|
|
ignoreDir := filepath.Join(root, "api")
|
|
|
|
err := filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 忽略 biz/model/api 目录
|
|
if d.IsDir() && strings.HasPrefix(path, ignoreDir) {
|
|
return filepath.SkipDir
|
|
}
|
|
|
|
if !d.IsDir() && strings.HasSuffix(d.Name(), ".pb.go") {
|
|
info, err := d.Info()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
modTime := info.ModTime()
|
|
if modTime.After(latestTime) {
|
|
latestTime = modTime
|
|
latestFile = path
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if latestFile == "" {
|
|
return "", fmt.Errorf("未找到 .pb.go 文件")
|
|
}
|
|
|
|
return latestFile, nil
|
|
}
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
fmt.Println("用法: genpb.exe <proto文件路径>")
|
|
os.Exit(1)
|
|
}
|
|
|
|
protoFile := os.Args[1]
|
|
|
|
// 1. 执行 hz update(同步等待执行完毕)
|
|
cmd := exec.Command("hz", "update", "-I", "idl", "-idl", protoFile)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
fmt.Println("正在执行 hz update ...")
|
|
if err := cmd.Run(); err != nil {
|
|
fmt.Println("hz update 执行失败:", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Println("hz update 执行完成.")
|
|
|
|
// 2. 查找最新 pb.go 文件并处理
|
|
modelDir := "biz/model"
|
|
latestFile, err := findLatestPBGoFile(modelDir)
|
|
if err != nil {
|
|
fmt.Println("查找最新 .pb.go 文件失败:", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := handleFile(latestFile); err != nil {
|
|
fmt.Println("处理 pb.go 文件失败:", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
fmt.Println("最新 .pb.go 文件处理完成:", latestFile)
|
|
}
|