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