经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Go语言中使用urfave/cli命令行框架
来源:jb51  时间:2022/7/19 11:03:16  对本文有异议

命令行参数处理以及urfave/cli使用

1.通过Os.Args获取cli的参数

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. if(len(os.Args) > 1) {
  8. for _,value := range os.Args{
  9. fmt.Printf( "%v\n",value)
  10. }
  11. return
  12. }
  13. fmt.Printf( "%s","没输入参数")
  14. }

2. 增加命令行选项

我们经常能看到 使用一些命令行会有很多选项。例如 ls -l 等

可以使用flag包来获取选项,例如下面的代码:

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. )
  6. var recusive bool
  7. var test string
  8. var level int
  9. func init() {
  10. flag.BoolVar(&recusive, "r", false, "Recusive xxxx")
  11. flag.StringVar(&test, "t", "Default String", "string option")
  12. flag.IntVar(&level, "l", 1, "level of xxxx")
  13. flag.Parse()
  14. }
  15. func main() {
  16. fmt.Println("recusive:", recusive)
  17. fmt.Println("test:", test)
  18. fmt.Println("level:", level)
  19. }

init函数内部使用了flag包中的BoolVar、StringVar以及IntVar等方法,标记了命令的选项。

  1. // StringVar defines a string flag with specified name, default value, and usage string.
  2. // The argument p points to a string variable in which to store the value of the flag.
  3. func StringVar(p *string, name string, value string, usage string) {
  4. CommandLine.Var(newStringValue(value, p), name, usage)
  5. }

像源码中描述那样,第一个参数用来接收输入的参数值,第二个用来定义参数名称(-l -r 等),第三个是默认参数、第四个是使用方法。

于是像上面的代码我们就可以这样使用:这里BoolVar的默认值是false, -r后面不增加其他参数,不用 -r true 这样。

3.urfave/cli的简单使用

urfave/cli是一个命令行的框架。举例说明:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/urfave/cli" //必须使用这个包
  6. )
  7. func main() {
  8. //定义两个变量用于接收控制台输入的值
  9. var stringValue string
  10. var boolValue bool
  11. //new一个app出来,就是我们的命令行程序
  12. app := cli.NewApp()
  13. app.Name = "TestCliApp" //起个名称
  14. app.Usage = "Test" //描述一下用途
  15. app.Version = "2.0.0" //设置一下版本号
  16. //重点可以设置一些选项操作
  17. //第一个是一个字符串的选项,第二个是一个布尔的选项
  18. app.Flags = []cli.Flag{
  19. cli.StringFlag{
  20. Name: "StringOption,s",
  21. Value: "DefaultValue",
  22. Usage: "Display a string value",
  23. Destination: &stringValue,
  24. },
  25. cli.BoolFlag{
  26. Name: "BoolOption,b",
  27. Usage: "Display a bool value",
  28. Destination: &boolValue,
  29. },
  30. }
  31. //定义我们命令行程序主要的工作
  32. app.Action = func(c *cli.Context) error {
  33. if c.NArg() > 0 {
  34. cmds := c.Args()
  35. for index, v := range cmds {
  36. fmt.Printf("args[%d]=%v\t", index, v)
  37. }
  38. } else {
  39. fmt.Println("No Args")
  40. }
  41. fmt.Println("stringOption", stringValue)
  42. fmt.Println("boolOption", boolValue)
  43. return nil
  44. }
  45. //执行程序
  46. app.Run(os.Args)
  47. }

有几个点:

  • 1.定义Flag的时候,Name可以用【,】分割,前面长的 可以用 --XXXX 来增加参数,后面则是短名 -x 来表示
  • 2.默认会有help和version两个选项
  • 3.我在使用的时候发现,当输入正常的 -b -s Hello 这样的选项的时候,C.NArg()返回的值是0,而输出错误的参数列表的时候,则是有值存在的。

我们可以用 -h (--help)查看一下生成的文档

可以参考具体的文档来构建自己的命令

到此这篇关于Go语言中使用urfave/cli命令行框架的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号