利用cli.go来写命令行应用
定义命令和子命令
下面是一个例子:
package mainimport ("fmt""os""github.com/codegangsta/cli" )func main() {app := cli.NewApp()app.Name = "jasperapp"app.Usage = "sample command-line app by jasper"app.Author = "Carter"app.Email = "jasper@xxx.com"app.Commands = []cli.Command{{Name: "read",ShortName: "r",Usage: "read something",Subcommands: []cli.Command{{Name: "articles",Usage: "read articles",Action: readArticles,},{Name: "tweets",Usage: "read Tweets",Action: readTweets,},},},}app.Run(os.Args) }func readArticles(ctx *cli.Context) {fmt.Println("Go to http://www.opscoder.info to read articles!") }func readTweets(ctx *cli.Context) {fmt.Println("Go to http://www.opscoder.info to read our tweets!") }
如果你不带参数去运行,你将会得到下面的帮助信息:
NAME:jasperapp - sample command-line app by jasperUSAGE:jasperapp [global options] command [command options] [arguments...]VERSION:0.0.0AUTHOR:Carter - <jasper@xxx.com>COMMANDS:read, r read somethinghelp, h Shows a list of commands or help for one commandGLOBAL OPTIONS:--help, -h show help--version, -v print the version
我们定义一个read
子命令,它有articles
和tweet
两个命令:
jasperapp read articles
输出为:
Go to http://www.opscoder.info to read articles!
或是运行:
jasperapp read tweets
输出为:
Go to http://www.opscoder.info to read our tweets!
使用context
每个动作都有一个context,在下面的例子中函数readArticles和readTweets接收一个参数,我们可以这样使用:
func readArticles(ctx *cli.Context) {fmt.Printf("The first argument was: %s", ctx.Args().First()) }
现在运行jasperapp read articles please
将会输出:
The first argument was: please
使用flags
为了展示flags的用法,我们稍微修改一下tweets
子命令:
{Name: "tweets",Usage: "read Tweets",Flags: []cli.Flag{cli.StringFlag{Name: "account",Value: "TheJasper",Usage: "name of Twitter account",},},Action: readTwitter, },
其中readTweets
函数这么写:
func readTwitter(ctx *cli.Context) {fmt.Printf("Go to http://www.opscoder.info/%s to read tweets!", ctx.String("account")) }
现在让我们编译结果并查看下tweets
子命令的帮助信息:
jasperapp read tweets --help
输出如下:
NAME:tweets - read TweetsUSAGE:command tweets [command options] [arguments...]OPTIONS:--account 'TheJasper' name of Twitter account
现在让我们试试:
$ jasperapp read tweets Go to http://www.opscoder.info/TheJasper to read tweets!$ jasperapp read tweets --account codegangsta Go to http://www.opscoder.info/codegangsta to read tweets!
总结
Cli.go还有很多自定义的东西,具体可以参考Godoc的文档。
利用cli.go来写命令行应用相关推荐
- 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...
虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...
- 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:打卡活动第二期来啦,100% 能获得奖品个人原创+1博客:点击前往,查看更多 虚拟机系列文章 深入理解 Java ...
- Linux安装redis并设置开机自启以及利用小红桶连接(命令行方式)
1. 安装 首先在/usr/local目录下创建redis目录,然后进入到该目录下: mkdir /usr/local/rediscd /usr/local/redis 进入redis目录后,执行下面 ...
- Linux下利用Tab键补齐命令行
当忘记某一个命令的全称时,可以试着敲出命令的前几个字符,然后按下Tab键,如果已敲出的字符匹配到的命令或文件是唯一的话,系统会自动补全 这时匹配为唯一命令 当已敲出的字符匹配到的不唯一时,可以连续敲两 ...
- 自己写的python软件可以在哪发布-如何发布一个Python命令行工具
本文简介 上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面.在发布PIP包的时候,居然Google不到一篇可以非常好的讲解这个流程的文章.于是整理 ...
- python 基础命令-Python 命令行(CLI)基础库
在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...
- 用Python写一个命令行火车票查看器
Linux编程点击右侧关注,免费入门到精通! 作者丨protream https://www.jianshu.com/p/f411d7e10c41 当你想查询一下火车票信息的时候,你还在上12306官 ...
- 如何手动写一个命令行工具?
文章目录 前言 一.一个最简单的命令行工具 二.命令行解析工具 1.commander (1)option (2)version (3)command (4)argument 2.co-prompt ...
- GO标准库—命令行参数解析FLAG
评论有人提到没有例子,不知道讲的是什么.因此,为了大家能够更好地理解,特意加了一个示例.其实本文更多讲解的是 flag 的实现原理,加上示例之后,就更好地知道怎么使用了.建议阅读 <Go语言标准 ...
最新文章
- 内存分配策略(二):JMM,Java Memory Model
- win8.1平板安装ubuntu16.04的折腾
- 【前端工程师手册】JavaScript作用域拾遗
- C++中static关键字作用总结
- QEMU模拟vexpress-a9 搭建Linux kernel运行环境
- 【Okio】Okio 简单入门
- cocos2d-x之读取xml文件
- 据说集齐这些特点的智能硬件百分百“作死”
- 鼠标被计算机无法识别怎么办,win7系统usb鼠标无法识别怎么解决 电脑usb鼠标无法识别解决方法...
- 字母c语言教学课件,计算机二级考试C语言辅导课件.ppt
- jmeter之http取样器
- 五分钟认清三款主流 Java Virtual Machine丨HotSpot、JRockit、J9
- 一篇入门Android UI 设计
- Android Qcom USB Driver学习(二)
- MySQL索引详解之索引的数据结构
- 玩安卓从 0 到 1 之项目总结
- 基于Python Django实现Prometheus Exporter
- XCTF_MOBILE15_人民的名义-抓捕赵德汉1-200
- matlab复数开偶次方根,运用复数1的n次方根巧解一类复数方程
- Oval验证框架学习
热门文章
- java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...
- “ Value of nested property ‘teacher‘ is null”内部嵌套对象为空的问题
- php获取当前页面地址代码,PHP获取当前页面URL地址程序代码
- c语言int超出范围溢出处理_整数溢出是怎么回事?Python和Numpy的整数为何不一样?...
- Python/Java程序员面试必备常用问题解析与答案
- 关于手机端适配的问题(rem,页面缩放)
- css按钮口诀 - CSS BUG顺口溜
- ThinkPHP 多语言的实现
- Ubuntu下使用Git_2
- ado.not--综合练习