package main
import (
"github.com/sohaha/zlsgo/zcli"
)
// 设置一个名为 name 的全局 flag ,类型为字符串,默认值为:小怪兽
var globalName = zcli.SetVar("name", "称呼").String("小怪兽")
// SapCli 定义子命令结构体
type SapCli struct {
content *string
sum *int
}
// Flags 子命令 Flags 设置
func (cmd *SapCli) Flags(subcommand *zcli.Subcommand) {
// 子命令的 flag 必须在这里设置
cmd.content = zcli.SetVar("content", "内容").Required().String()
cmd.sum = zcli.SetVar("sum", "测试数量").Required().Int()
subcommand.Desc = "更改 Say 子指令描述"
}
// Run 子命令执行方法
func (cmd *SapCli) Run(args []string) {
zcli.Log.Printf("==执行 say 子命令==\\n\\n %s: %s %d", *globalName, *cmd.content, *cmd.sum)
zcli.Log.Printf(" %+v", args)
}
func main() {
// 可以自定义Logo,版本号之类的
zcli.Logo = `
________ ____ .__ .__
\\___ /_/ ___\\ | | |__|
/ / \\ \\___ | | | |
/_____ \\ \\___ >| |__| |
\\/ \\/ |____/|__|`
zcli.Version = "1.0.0"
zcli.Name = "命令行应用示例"
// 开启支持 -detach 进行后台运行
// zcli.EnableDetach = true
// 解析参数命令,如果不手动执行 zcli.Run() 内也会执行
// zcli.Parse()
// 添加子命令: 子命令名称 子命令描述 子命令接口
zcli.Add("say", "Say 子指令", &SapCli{})
// 执行未定义子命令(非必要)
zcli.SetUnknownCommand(func(name string) {
zcli.Log.Warnf("子命令:%s,不存在", name)
})
// 启动,如果没有执行子命令就直接打印帮助信息
// zcli.Run()
// 自定义主命令执行
zcli.Run(func() {
zcli.Log.Printf("执行主命令\\n name: %+v\\n", *globalName)
})
}
# 执行测试
go build && ./main --help # 查看帮助信息
go build && ./main -name 人类
go build && ./main -debug say -content 打倒奥特曼 -sum 99
go build && ./main -debug -name 超人 say -content 打倒小怪兽 -sum 100 大招 机关炮
命令行参数的格式
-flag xxx (使用空格,一个 - 符号)
-–flag xxx (使用空格,两个 - 符号)
-flag=xxx (使用等号,一个 - 符号)
–-flag=xxx (使用等号,两个 - 符号)