🖥

命令行应用

🛠️
Golang 程序实现开启自启与进程守护(全平台)

完整示例

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 (使用等号,两个 - 符号)