zoukankan      html  css  js  c++  java
  • 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
    ", c.Args().Get(0))
        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() > 0 {
          name = c.Args().Get(0)
        }
        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:

    待补充。。。

  • 相关阅读:
    VMware WorkStation 用 VMTools 官方下载地址 windows-vmtools tools-windows
    LeetCode Golang 9.回文数
    CentOS6.5中配置Rabbitmq3.6.6集群方案
    python之lambda、filter、map、reduce的用法讲解
    跨主机容器之间通信实现方式:etcd+flanned
    mongo3.4安装
    centos 时区的更改 UTC TO CST
    Elasticsearch5安装
    docker1.*.*版本安装
    使用weave来实现多宿主机中的docker容器之间通信
  • 原文地址:https://www.cnblogs.com/wjx0912/p/6183671.html
Copyright © 2011-2022 走看看