cli 简介
========
`cli` 是一个简单易用的命令行程序开发工具。和标准库的flag相比,`cli` 提供了更加优雅的参数定义方式。`cli` 将参数定义放在一个结构体,每个字段代表一个flag,每个flag通过golang的tag来描述。支持的tag包括:
* cli - flag名
* usage - flag的使用说明
* dft - flag的默认值
* name - flag的引用显示名
举个栗子:
![cli-1.PNG](http://studygolang.qiniudn.com/160313/9549f7dc11f8bac9863264cb35320e41.PNG)
`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
==================
先上一个图
![cli-2.PNG](http://studygolang.qiniudn.com/160313/09b4cc89fd2c0b69dd2b32185abd9ec2.PNG)
看,就是这么简单。在终端上键入
go build -o hello
进行编译,然后运行
./hello -h
输出如下:
![cli-3.PNG](http://studygolang.qiniudn.com/160313/1323e04fbd8ecfaf0670bb78b619cf6b.PNG)
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个例子:
* [Hello](https://github.com/mkideal/cli/blob/master/examples/hello/main.go)
* [Screenshot](https://github.com/mkideal/cli/blob/master/examples/screenshot/main.go)
* [Basic](https://github.com/mkideal/cli/blob/master/examples/basic/main.go)
还可以使用工具 [goplus](https://github.com/mkideal/goplus) 快速构建一个 `cli` 应用程序
go get github.com/mkideal/goplus
goplus new <AppName>
有疑问加站长微信联系(非本文作者)