命令行应用通常很小,程序猿们也不喜欢为它编写注释。所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了。
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. HBase的基本架构及其原理介绍

    1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ...

  2. 推荐几款实用的Android Studio 插件

    推荐几款实用的Android Studio 插件 泡在网上的日子 发表于 2015-10-09 10:47 第 17453 次阅读 插件,Android Studio 10 编辑推荐:稀土掘金,这是一 ...

  3. Android Studio2.2.2下RecyclerView的使用

    1,概述 RecyclerView可以完全代替ListView.GridView,整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同Layout ...

  4. ibatis

    ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解 1.sqlMapConfig.xml配置文件详解: Xml代码 1. < ...

  5. UE4 通过HTTP 接受JPG并动态 构建 UTexture2D 简单例子

    s void UChildBaseUserWidget::setTextureFromLoadImg(FHttpRequestPtr _request, FHttpResponsePtr _respo ...

  6. select标签让文字垂直居中问题

    直接在select样式中添加:padding:npx 0; n的大小视select标签的高度而定.一般为8px左右.

  7. CodeVS 线段覆盖1~5

    #include <bits/stdc++.h> using namespace std; ; struct Info{int l,r;}P[Maxn]; int n,Cnt,F[Maxn ...

  8. 19、lambda表达式树

    一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...

  9. MVC+UnitOfWork+Repository+EF 之我见

    UnitOfWork+Repository模式简介: 每次提交数据库都会打开一个连接,造成结果是:多个连接无法共用一个数据库级别的事务,也就无法保证数据的原子性.一致性.解决办法是:在Reposito ...

  10. awk(2)-模式(pattern)

    在上文 awk(1)-简述我们将简要描述了awk的主要使用方向和构成(由一个或多个模式-动作组成),本小节主要讲述awk的各种模式. ps:例子中使用的输入文件(如countries)内容可由awk( ...