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:

    待补充。。。

  • 相关阅读:
    线程的休眠和中断
    线程的强制运行
    多线程基础
    jar文件につぃて
    Exception和RuntimeException
    异常的抛出
    java之适配器模式
    分支语句
    运算符与表达式
    练习课(一)
  • 原文地址:https://www.cnblogs.com/wjx0912/p/6183671.html
Copyright © 2011-2022 走看看