博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言的命令行库
阅读量:5103 次
发布时间:2019-06-13

本文共 1713 字,大约阅读时间需要 5 分钟。

 

 

命令行应用通常很小,程序猿们也不喜欢为它编写注释。所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了。

https://github.com/urfave/cli 这个项目因此而生。
安装:go get github.com/urfave/cli
以下的例子均来自官网:

(例1)

package mainimport (  "os"  "github.com/urfave/cli")func main() {  cli.NewApp().Run(os.Args)}

 

(例2)

package mainimport (  "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 mainimport (  "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(0))    return nil   }  app.Run(os.Args)}

 

 

 (例4)

package mainimport (  "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:

待补充。。。

转载于:https://www.cnblogs.com/wjx0912/p/6183671.html

你可能感兴趣的文章
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
MySQL更改默认的数据文档存储目录
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Html5 离线页面缓存
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>