温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Go语言中如何使用urfave/cli命令行框架

发布时间:2022-07-19 11:28:55 来源:亿速云 阅读:186 作者:iii 栏目:开发技术

这篇文章主要讲解了“Go语言中如何使用urfave/cli命令行框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中如何使用urfave/cli命令行框架”吧!

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

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

package main
 
import (
   "fmt"
   "os"
)
 
func main() {
 
   if(len(os.Args) > 1) {
      for _,value := range os.Args{
         fmt.Printf( "%v\n",value)
      }
      return
   }
   fmt.Printf( "%s","没输入参数")
}

2. 增加命令行选项

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

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

package main
 
import (
    "flag"
    "fmt"
)
 
var recusive bool
var test string
var level int
 
func init() {
    flag.BoolVar(&recusive, "r", false, "Recusive xxxx")
    flag.StringVar(&test, "t", "Default String", "string option")
    flag.IntVar(&level, "l", 1, "level of xxxx")
    flag.Parse()
}
 
func main() {
    fmt.Println("recusive:", recusive)
    fmt.Println("test:", test)
    fmt.Println("level:", level)
}

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

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

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

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

Go语言中如何使用urfave/cli命令行框架

3.urfave/cli的简单使用

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

package main
 
import (
    "fmt"
    "os"
 
    "github.com/urfave/cli" //必须使用这个包
)
 
func main() {
 
    //定义两个变量用于接收控制台输入的值
    var stringValue string
    var boolValue bool
 
    //new一个app出来,就是我们的命令行程序
    app := cli.NewApp()
    app.Name = "TestCliApp" //起个名称
    app.Usage = "Test"      //描述一下用途
    app.Version = "2.0.0"   //设置一下版本号
    //重点可以设置一些选项操作
    //第一个是一个字符串的选项,第二个是一个布尔的选项
    app.Flags = []cli.Flag{
        cli.StringFlag{
            Name:        "StringOption,s",
            Value:       "DefaultValue",
            Usage:       "Display a string value",
            Destination: &stringValue,
        },
        cli.BoolFlag{
            Name:        "BoolOption,b",
            Usage:       "Display a bool value",
            Destination: &boolValue,
        },
    }
     
    //定义我们命令行程序主要的工作
    app.Action = func(c *cli.Context) error {
 
        if c.NArg() > 0 {
            cmds := c.Args()
            for index, v := range cmds {
                fmt.Printf("args[%d]=%v\t", index, v)
            }
        } else {
            fmt.Println("No Args")
        }
 
        fmt.Println("stringOption", stringValue)
        fmt.Println("boolOption", boolValue)
        return nil
    }
 
    //执行程序
    app.Run(os.Args)
}

有几个点:

  • 1.定义Flag的时候,Name可以用【,】分割,前面长的 可以用 --XXXX 来增加参数,后面则是短名 -x 来表示

  • 2.默认会有help和version两个选项

  • 3.我在使用的时候发现,当输入正常的 -b -s Hello 这样的选项的时候,C.NArg()返回的值是0,而输出错误的参数列表的时候,则是有值存在的。

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

Go语言中如何使用urfave/cli命令行框架

感谢各位的阅读,以上就是“Go语言中如何使用urfave/cli命令行框架”的内容了,经过本文的学习后,相信大家对Go语言中如何使用urfave/cli命令行框架这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI