cli是一个用go语言写成的用于快速构建go语言命令行程序的工具。
有些什么特色呢
* 简单,容易上手
* 有安全检查. 包括类型检查,值范围检查,更强大的是自定义的验证函数.
* 基于go语言的tag属性实现,参数定义结构化,简洁优雅.支持4种tag: cli,usage,dft, name.
* 支持默认值标签dft,可以用环境变量做默认值,支持required声明.
* 支持单个flag多个名字,像 -h --help 这样的.
* 支持命令树形结构,N层子命令随意玩.
* 支持子命令错误纠正提示,hlp会问你是要help吗
* 天然的命令树形结构摇身一变就可以变成HTTP路由了,像$app hello world -> /hello/world
* 支持命令行参数结构体的继承
* 支持短flag的组合式.-x -y -z -> -xyz, 不过必须全是bool型的才可以组合
* 支持长这样的-Fvalue的用法,它就等于-F value,不过-F不能是bool型
* 可以用 -- 来隔离flags和arguments
* 支持使用数组和map了,数组的-F v1 -F v2,map的-F k1=v1 -F k2=v2
一个hello的例子
package main import ( "github.com/mkideal/cli" ) type argT struct { Help bool `cli:"!h,help" usage:"display help information"` Name string `cli:"name" usage:"your name" dft:"world"` Age uint8 `cli:"a,age" usage:"your age" dft:"100"` } func main() { cli.Run(&argT{}, func(ctx *cli.Context) error { argv := ctx.Argv().(*argT) if argv.Help { ctx.String(ctx.Usage()) } else { ctx.String("Hello, %s! Your age is %d?\n", argv.Name, argv.Age) } return nil }) }