命令行应用通常很小,程序猿们也不喜欢为它编写注释。所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了。
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语言的命令行库的更多相关文章

  1. Google 开源的 Python 命令行库:深入 fire(一)

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  2. Google 开源的 Python 命令行库:fire 实现 git 命令

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  3. golang命令行库cobra的使用

    简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序.下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app ...

  4. [C语言]在命令行编译执行程序

    ----------------------------------------------------------------------------------------- [开始] 1. 在M ...

  5. [日常] Go语言圣经-命令行参数

    1.编译 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就会从网上获取代码,并放到对应目录中 下载的代码会放在$GOPATH/src/gop ...

  6. 大家都说好用的 Python 命令行库:click

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  7. Google 开源的 Python 命令行库:初探 fire

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  8. Google 开源的 Python 命令行库:深入 fire(二)

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  9. R语言 使用命令行参数运行R程序

    args_test.R 代码如下: Args <- commandArgs()cat("Args[1]=",Args[1],"\n")cat(" ...

随机推荐

  1. php生成html文件的多种方法介绍

    我经常会在网上看到有人问怎么将整个动态的网站静态化,其实实现的方法很简单.  代码如下 复制代码 <?php//在你的开始处加入 ob_start(); ob_start(); //以下是你的代 ...

  2. GeoHash原理解析

    GeoHash 核心原理解析       引子 一提到索引,大家脑子里马上浮现出B树索引,因为大量的数据库(如MySQL.oracle.PostgreSQL等)都在使用B树.B树索引本质上是对索引字段 ...

  3. 初学AOP

    src\dayday\Count.java package dayday;import org.springframework.stereotype.Component;/** * Created b ...

  4. 通过a++来理解闭包改变作用域的问题

    纯属个人理解,如果有误请指出! 让我们先看一段代码 function dog(){ var a=100; a++; return a; } alert(dog()); alert(dog()); 我们 ...

  5. windows10和ubuntu16.04双系统下时间不对的问题 ZT

    最近装了windows10和ubuntu16.04双系统,仍然出现了喜闻乐见的老问题,装完后,在windows下时区不对,之前的老办法是: sudo gedit /etc/default/rcS ut ...

  6. JAVA 布尔型的应用

    定义一个布尔类型的flag, 只是当做一个开关的意思.先定义一个标记,然后根据一些条件给这个flag赋不同的值,最后,再根据这个flag不同的值,做不同的处理.   public static voi ...

  7. 关系型数据之LinQ基本查询

    如下图所示关系型数据,LinQ语句为:

  8. NSMutableDictionary中 setValue和setObject的区别

    对于- (void)setValue:(id)value forKey:(NSString *)key;函数 官方解释如下 Send -setObject:forKey: to the receive ...

  9. PPT设计宝典!十招教你做出拿得出手的PPT

    据说上班用 excel 的比 word 的工资高,用 ppt 的比用 excel 的工资高.无论如何,在职场演讲汇报中,PPT 扮演着至关重要的角色. 在本文我们将用 10 个超级技巧来解决糟糕的演示 ...

  10. java单例-积木系列

    一步步知识点归纳吧,把以前似懂非懂,了解表面,知道点不知道面的知识归一下档.   懒汉式单例: 私有化构造函数,阻止外界实例话对象,调用getInstance静态方法,判断是否已经实例化. 为什么是懒 ...