定义命令和子命令

下面是一个例子:

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子命令,它有articlestweet两个命令:

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来写命令行应用相关推荐

  1. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...

    虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...

  2. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:打卡活动第二期来啦,100% 能获得奖品个人原创+1博客:点击前往,查看更多 虚拟机系列文章 深入理解 Java ...

  3. Linux安装redis并设置开机自启以及利用小红桶连接(命令行方式)

    1. 安装 首先在/usr/local目录下创建redis目录,然后进入到该目录下: mkdir /usr/local/rediscd /usr/local/redis 进入redis目录后,执行下面 ...

  4. Linux下利用Tab键补齐命令行

    当忘记某一个命令的全称时,可以试着敲出命令的前几个字符,然后按下Tab键,如果已敲出的字符匹配到的命令或文件是唯一的话,系统会自动补全 这时匹配为唯一命令 当已敲出的字符匹配到的不唯一时,可以连续敲两 ...

  5. 自己写的python软件可以在哪发布-如何发布一个Python命令行工具

    本文简介 上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面.在发布PIP包的时候,居然Google不到一篇可以非常好的讲解这个流程的文章.于是整理 ...

  6. python 基础命令-Python 命令行(CLI)基础库

    在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...

  7. 用Python写一个命令行火车票查看器

    Linux编程点击右侧关注,免费入门到精通! 作者丨protream https://www.jianshu.com/p/f411d7e10c41 当你想查询一下火车票信息的时候,你还在上12306官 ...

  8. 如何手动写一个命令行工具?

    文章目录 前言 一.一个最简单的命令行工具 二.命令行解析工具 1.commander (1)option (2)version (3)command (4)argument 2.co-prompt ...

  9. GO标准库—命令行参数解析FLAG

    评论有人提到没有例子,不知道讲的是什么.因此,为了大家能够更好地理解,特意加了一个示例.其实本文更多讲解的是 flag 的实现原理,加上示例之后,就更好地知道怎么使用了.建议阅读 <Go语言标准 ...

最新文章

  1. 内存分配策略(二):JMM,Java Memory Model
  2. win8.1平板安装ubuntu16.04的折腾
  3. 【前端工程师手册】JavaScript作用域拾遗
  4. C++中static关键字作用总结
  5. QEMU模拟vexpress-a9 搭建Linux kernel运行环境
  6. 【Okio】Okio 简单入门
  7. cocos2d-x之读取xml文件
  8. 据说集齐这些特点的智能硬件百分百“作死”
  9. 鼠标被计算机无法识别怎么办,win7系统usb鼠标无法识别怎么解决 电脑usb鼠标无法识别解决方法...
  10. 字母c语言教学课件,计算机二级考试C语言辅导课件.ppt
  11. jmeter之http取样器
  12. 五分钟认清三款主流 Java Virtual Machine丨HotSpot、JRockit、J9
  13. 一篇入门Android UI 设计
  14. Android Qcom USB Driver学习(二)
  15. MySQL索引详解之索引的数据结构
  16. 玩安卓从 0 到 1 之项目总结
  17. 基于Python Django实现Prometheus Exporter
  18. XCTF_MOBILE15_人民的名义-抓捕赵德汉1-200
  19. matlab复数开偶次方根,运用复数1的n次方根巧解一类复数方程
  20. Oval验证框架学习

热门文章

  1. java 如何让程序一直运行的程序_java – 如何在程序结束前让方法在后台持续运行?...
  2. “ Value of nested property ‘teacher‘ is null”内部嵌套对象为空的问题
  3. php获取当前页面地址代码,PHP获取当前页面URL地址程序代码
  4. c语言int超出范围溢出处理_整数溢出是怎么回事?Python和Numpy的整数为何不一样?...
  5. Python/Java程序员面试必备常用问题解析与答案
  6. 关于手机端适配的问题(rem,页面缩放)
  7. css按钮口诀 - CSS BUG顺口溜
  8. ThinkPHP 多语言的实现
  9. Ubuntu下使用Git_2
  10. ado.not--综合练习