cli - 构建强大命令行程序的工具箱 (1)

mkideal · · 3883 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

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>

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3883 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传