cli 简介
`cli` 是一个简单易用的命令行程序开发工具。和标准库的flag相比,`cli` 提供了更加优雅的参数定义方式。`cli` 将参数定义放在一个结构体,每个字段代表一个flag,每个flag通过golang的tag来描述。支持的tag包括: * cli - flag名 * usage - flag的使用说明 * dft - flag的默认值 * name - flag的引用显示名 举个栗子:
`cli` 支持一些丰富的特性以便于更加便捷的创建命令行应用程序。包括: * N级子命令 * 子命令提示 - 如果有build的字名,那么键入`bui`就会得到错误,同时提示是否想要的是build * HTTP路由到子命令 - /path/to/cmd -> path to cmd * RPC - 远程调用,客户端服务器共享代码 * 参数定义支持结构体成员及继承 后续将陆续讲解`cli`的各个特性。今天将介绍如何利用`cli`开始一个应用程序的构建。
获取 cli
cli 开源在 [github](https://github.com/mkideal/cli) 上,欢迎大家前去 star :-) 使用go get获取 go get github.com/mkideal/cli
cli 的 hello world
先上一个图
看,就是这么简单。在终端上键入 go build -o hello 进行编译,然后运行 ./hello -h 输出如下:
1. 第4行引入 `cli` 包 2. 7~11行定义命令行参数 help(h),name,age(a) 3. 14行的`Run`函数接受两个参数:1)命令行参数对象;2)回调函数 4. 15行从回调函数的入参中取到解析后的命令行参数对象 5. 17行输出帮助说明 6. 18行执行我们的逻辑(这里只是输出一行文本) 函数 `cli.Run` 根据 os.Args[1:]解析参数到对象argT上,最后放在 `cli.Context` 中传回到回掉函数。
tag 介绍
cli
`cli` 定义了flag的名字,支持单字符和多字符,用逗号分隔可定义多个名字,但不能重复,也不能和其他flag的的重复。 单字符名字在终端命令中加一个`-`,多字符的加两个`-`,像这样 ./hello -h ./hello --help `cli` tag前加`*`表示该flag是必须赋值的。像这样: Name string `cli:"*name"` `cli` tag 前加`!`表示如果该flag赋值为true,则不对参数做校验了,这一特性经常用于help参数。像这样: Help bool `cli:"!h,help"` `cli` tag 为 `-`时将不对其进行参数解。像这样: Ignored string `cli:"-"` 如过参数定义中有`cli`为空或不存在的情形将使用字段名作为flag名。
usage
`usage` 描述了flag的用法或说明
dft
`dft` 指定flag的默认值。`dft`支持指定环境变量为默认值。比如 Home string `cli:"home" usage:"home dir" dft:"$HOME"`
name
`name` 为flag去了一个在帮助中显示用的别名。
结束语
今天就介绍这些了。然后可以看看下面3个例子:
还可以使用工具 goplus 快速构建一个 cli
应用程序
go get github.com/mkideal/goplus goplus new <AppName>