go语言的命令行库
命令行应用通常很小,程序猿们也不喜欢为它编写注释。所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了。
https://github.com/urfave/cli 这个项目因此而生。
安装:go get github.com/urfave/cli
以下的例子均来自官网:
(例1)
package main import (
"os" "github.com/urfave/cli"
) func main() {
cli.NewApp().Run(os.Args)
}

(例2)
package main import (
"fmt"
"os" "github.com/urfave/cli"
) func main() {
app := cli.NewApp()
app.Name = "greet"
app.Usage = "fight the loneliness!"
app.Action = func(c *cli.Context) error {
fmt.Println("Hello friend!")
return nil
} app.Run(os.Args)
}

(例3)
package main import (
"fmt"
"os" "github.com/urfave/cli"
) func main() {
app := cli.NewApp() app.Action = func(c *cli.Context) error {
fmt.Printf("Hello %q\n", c.Args().Get())
return nil
} app.Run(os.Args)
}

(例4)
package main import (
"fmt"
"os" "github.com/urfave/cli"
) func main() {
app := cli.NewApp() app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang",
Value: "english",
Usage: "language for the greeting",
},
} app.Action = func(c *cli.Context) error {
name := "Nefertiti"
if c.NArg() > {
name = c.Args().Get()
}
if c.String("lang") == "spanish" {
fmt.Println("Hola", name)
} else {
fmt.Println("Hello", name)
}
return nil
} app.Run(os.Args)
}

还有几个小例子,情况差不多,请自行阅读。
然而,事情到这里并没有结束。。。
参数的解析还可以从yaml和toml里面获取,这是两个什么东东?
经常写配置文件的会用到ini, xml, json格式;后2个写起来太虐心,ini语法舒服但结构性缺陷决定它只能写简单配置。
因此yaml诞生(2001年)了,阮一峰在几个月前写了一篇教程:http://www.ruanyifeng.com/blog/2016/07/yaml.html
yaml不断发展,此后日益复杂,导致积重难返,github创始人主导了一个新的项目toml:http://mlworks.cn/posts/introduction-to-toml/
从语法简单性来说:ini > toml > yaml > json > xml
个人认为,没有必要强上yaml/toml,简单的用ini,稍复杂的json,很复杂的xml。
urfave/cli使用yaml/toml:
待补充。。。
go语言的命令行库的更多相关文章
- Google 开源的 Python 命令行库:深入 fire(一)
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Google 开源的 Python 命令行库:fire 实现 git 命令
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- golang命令行库cobra的使用
简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序.下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app ...
- [C语言]在命令行编译执行程序
----------------------------------------------------------------------------------------- [开始] 1. 在M ...
- [日常] Go语言圣经-命令行参数
1.编译 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就会从网上获取代码,并放到对应目录中 下载的代码会放在$GOPATH/src/gop ...
- 大家都说好用的 Python 命令行库:click
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Google 开源的 Python 命令行库:初探 fire
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Google 开源的 Python 命令行库:深入 fire(二)
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- R语言 使用命令行参数运行R程序
args_test.R 代码如下: Args <- commandArgs()cat("Args[1]=",Args[1],"\n")cat(" ...
随机推荐
- NOIP 考前 并查集复习
POJ 1182 把一个点拆成x,x+n,x+2*n,x吃y可以表示认为x,y+n是一类的,x+n,y+2*n是一类,x+2*n,y是一类. #include <cstdio> ; ],n ...
- ZOJ 3911 线段树
题意:有N个数字,M个操作,然后回答每个Q开头的询问 操作形式: A val pos:在pos位置上+val Q l r:询问l~r之间有多少个质数 R val l r:把l~r之间的数字替换成val ...
- HDU 5113 dfs剪枝
题意:告诉格子规格,颜色个数,以及每个颜色能涂得格子数目,问是否能够实现相邻两个格子的颜色数目不相同. 分析:因为数据很小,格子最多是5 * 5大小的,因此可以dfs.TLE了一次之后开始剪枝,31m ...
- C#语法知识
接口: 接口可以包含方法.属性.事件.索引器或这四种成员类型的任意组合. 接口不能包含常量.字段.运算符.实例构造函数.析构函数或类型.当类或结构实现接口时,类或结构必须为该接口定义的所有成员提供实现 ...
- 机器学习之分类器性能指标之ROC曲线、AUC值
分类器性能指标之ROC曲线.AUC值 一 roc曲线 1.roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性 ...
- 基于数据库MySQL的简易学生信息管理系统
通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...
- IOS 关于开发的APP跳转第三方应用的心得
昨天晚上自己做了个APP,想做个功能可以去跳转到手机上的微博,微信.找了好些资料,下面总结下自己的心得. 跳转的核心代码如下: if ([[UIApplication sharedApplicatio ...
- SDK截图程序(一)
程序将系统窗口左上角100*100的图像复制到粘贴板上.程序的关键位置上加上了注释,相关知识<windows程序设计>第14章内容 #include <windows.h> # ...
- cs231n笔记:线性分类器
cs231n线性分类器学习笔记,非完全翻译,根据自己的学习情况总结出的内容: 线性分类 本节介绍线性分类器,该方法可以自然延伸到神经网络和卷积神经网络中,这类方法主要有两部分组成,一个是评分函数(sc ...
- Iso-Seq学习
SMRT portal安装教程: http://www.pacb.com/wp-content/uploads/2015/09/SMRT-Analysis-Software-Installation- ...