代码拉取完成,页面将自动刷新
package grpc
import (
"gitee.com/redefine-code/watchdog/tools"
"github.com/gookit/color"
"github.com/spf13/cobra"
"os"
"os/exec"
"path/filepath"
)
// grpc grpc 生成代码
var (
helpDoc = `grpc :
Descriptions:根据根目录proto文件生成相关grpc代码 proto文件名称为根目录名称.proto 同时支持格式化
Usage
--generate | -g 生成文件
--delete | -d 删除文件
--format | -f 是否格式化proto文件
Example:
watchdog grpc -g -d -f`
HomeDir string
isDelete *bool
isFormat *bool
isGenerate *bool
protoFileExt = ".proto"
etcFileExt = ".yaml"
)
var (
GpCmd = &cobra.Command{
Use: "grpc",
Short: "generate grpc code by proto file from base path or format the proto file",
Long: `generate grpc code by proto file from base path or format the proto file`,
TraverseChildren: true,
RunE: func(cmd *cobra.Command, args []string) error {
run()
return nil
},
}
)
func init() {
//帮助命令
GpCmd.SetHelpFunc(func(command *cobra.Command, strings []string) {
color.Greenln(helpDoc)
})
//标签
isDelete = GpCmd.Flags().BoolP("delete", "d", false, "-d")
isGenerate = GpCmd.Flags().BoolP("generate", "g", false, "-g")
isFormat = GpCmd.Flags().BoolP("format", "f", false, "-f")
// 获取当前用户的home目录,即根目录
GpCmd.MarkFlagsRequiredTogether("delete", "generate")
HomeDir, _ = os.Getwd()
}
func run() {
if *isGenerate {
// goctl rpc protoc --style goZero $protoName --go_out=. --go-grpc_out=. --zrpc_out=. -m
baseDir := filepath.Base(HomeDir)
protoFileName := baseDir + protoFileExt
filePath := tools.BuildPath(HomeDir, protoFileName)
isExist, _ := tools.FileIsExist(filePath)
if !isExist {
color.Redln(filePath + ":is not exist")
os.Exit(1)
}
// 执行shell命令
cmd := exec.Command("/bin/bash", "-c", "goctl rpc protoc --style goZero "+protoFileName+" --go_out=. --go-grpc_out=. --zrpc_out=. -m")
// 运行命令并获取输出
_, err := cmd.CombinedOutput()
if err != nil {
color.Redf("generate grpc err:%s", err)
}
if *isDelete {
//grpc 客户端目录
clientDir := tools.BuildPath(HomeDir, "/client")
//默认的配置文件
etcFile := tools.BuildPath(HomeDir, "etc", baseDir) + etcFileExt
//internal下的config目录
internalConfigDir := tools.BuildPath(HomeDir, "internal", "config")
if err := tools.DelDir(clientDir); err != nil {
color.Redln("删除目录失败", err)
os.Exit(1)
}
if err := tools.DelDir(internalConfigDir); err != nil {
color.Redln("删除目录失败", err)
os.Exit(1)
}
if err := tools.DelFile(etcFile); err != nil {
color.Redln("删除文件失败", err)
os.Exit(1)
}
}
}
if *isFormat {
baseDir := filepath.Base(HomeDir)
protoFileName := baseDir + protoFileExt
filePath := tools.BuildPath(HomeDir, protoFileName)
isExist, _ := tools.FileIsExist(filePath)
if !isExist {
color.Redln(filePath + ":is not exist")
os.Exit(1)
}
// 执行shell命令
cmd := exec.Command("/bin/bash", "-c", `clang-format -style="{BasedOnStyle: Google, IndentWidth: 4, ColumnLimit: 0, AlignConsecutiveAssignments: true}" -i `+filePath)
// 运行命令并获取输出
_, err := cmd.CombinedOutput()
if err != nil {
color.Redf("format %s err:%s by clang", protoFileName, err)
}
}
color.Greenln("Done")
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。