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的例子
<pre class="brush:cpp ;toolbar: true; auto-links: false;">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
})
}</pre>