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

发布于:2017年08月07日 已被阅读

cli 简介

    `cli` 是一个简单易用的命令行程序开发工具。和标准库的flag相比,`cli` 提供了更加优雅的参数定义方式。`cli` 将参数定义放在一个结构体,每个字段代表一个flag,每个flag通过golang的tag来描述。支持的tag包括:    * cli - flag名    * usage - flag的使用说明    * dft - flag的默认值    * name - flag的引用显示名    举个栗子:

cli-1.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

    看,就是这么简单。在终端上键入            go build -o hello    进行编译,然后运行            ./hello -h    输出如下:

cli-3.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个例子:

还可以使用工具 goplus 快速构建一个 cli 应用程序

    go get github.com/mkideal/goplus    goplus new <AppName>


最新发布
linux下svn提交忽略某些文件... (119)
使用批处理来批量更新、提交SVN... (116)
linux查看目录文件大小命令 (117)
linux tar打包压缩排除某个... (114)
Linux tar压缩和解压 (116)
SVN子命令add用法浅析 (111)
热门博文
网友FBI探案:马蓉iPad惊人发现... (43320)
优衣库这个广告拍的很真实,反应人性,... (10110)
霍金携手俄罗斯富豪耗资1亿美元寻找外... (4734)
如何才能查看PHP内置函数源代码... (1196)
微信支付开发当前URL未注册的解决方... (514)
《谁为爱情买单》中的经典面试 ... (414)
精华博文
[推荐]Centos7 安装配置 SVN (117)
easyswoole框架安装 (115)
php开启pecl的支持(推荐) (116)
1-10个恋爱表现:男朋友爱你程度到... (119)
女生喜欢你的10个程度,到第六个就可... (121)
Eclipse 没有Server选项... (153)
友情链接
我来忙 (110)