美文网首页程序员
如何使用go做命令行flag解析

如何使用go做命令行flag解析

作者: 糖醋沼跃鱼 | 来源:发表于2020-12-17 11:23 被阅读0次

Using Command Line Flags in Go

Go有很多方式去处理CLIflags,第一种方式就是不适用任何库,使用os.Args检测。第二种方式是去使用标准库flag,第三种方式就是使用众多第三方CLI库之一,比如Cobra。

这次的内容主要讨论第二种方式,使用标准库flag,因为它在os.Args之上提供了诸多未处理的语法分析的便利,它还是内建的。在使用前 import "flag"

接受一个int类型参数:

func Int(name string, value int, usage string) *int

var count = flag.Int("count", 5, "the count of items")
fmt.Println("count value ", *count)

第一个参数是flag名字当使用在CLI中,第二个参数是默认值,第三个对于该参数的描述

flag.IntVar()提供了一种可以替换的语法

func IntVar(p *int, name string, value int, usage string)

var count int
flag.IntVar(&count, "count", 5, "the count of items")
fmt.Println("count value ", count)

这里参数发生了变化,第一个参数变成了变量的引用
两者主要的差别就是第一个用例中你得到的是一个指针,第二个用例你得到的是一个值
flag提供了许多方法去分析不同的flag类型,你可以用他们处理每一种你想接受的类型。

func Bool(name string, value bool, usage string) *bool
func BoolVar(p *bool, name string, value bool, usage string)
func Duration(name string, value time.Duration, usage string) *time.Duration
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
func Float64(name string, value float64, usage string) *float64
func Float64Var(p *float64, name string, value float64, usage string)
func Int(name string, value int, usage string) *int
func Int64(name string, value int64, usage string) *int64
func Int64Var(p *int64, name string, value int64, usage string)
func IntVar(p *int, name string, value int, usage string)
func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Uint(name string, value uint, usage string) *uint
func Uint64(name string, value uint64, usage string) *uint64
func Uint64Var(p *uint64, name string, value uint64, usage string)
func UintVar(p *uint, name string, value uint, usage string)

传递错误的数据类型会引发error,暂停程序,还会将所需的用法打印给用户。

如何去设置flag?

只需要将- flagname加入到CLI命令中,有四种等效的语法:

-count=x
-count x
--count=x
--count x

你可以向命令传递任意数量的flag,但是如果flag包认不出你传递的flag它也会对停止对其它flag的解析,这意味着如果你还有其他非flag的参数,一定要在开始时,先使用所有的flag参数,避免flag包停止解析。

解析flags:

在你定义好所有的flags之后,你需要去调用

flag.Parse()

这样才能真正的解析他们

Boolean flags

Boolean flags设置的方法很简单,只需要加-count,这会让boollean flag得到true的值,如果设置false的值,可以使用-count=false。下面的值用于设置boolean flags都是有效的:

1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False.

在实际生产环境中,许多时候经常会看到CIL应用接受一个带有描述性名称的标志,以及同一个带有字母缩写的标志,你可以通过提供两个handler来实现:
var gopherType string

func init() {
    const (
        defaultGopher = "pocket"
        usage         = "the variety of gopher"
    )
    flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)
    flag.StringVar(&gopherType, "g", defaultGopher, usage+" (shorthand)")
}

what's next?

下一步还能做什么,你可以更深层次的去研究下去,像别的CLI命令那样,开发一些子命令,甚至还可以开发一个简单的CLI工具通过Go语言。

reference

相关文章

  • Go标准库flag使用

    Go语言标准库flag基本使用 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简...

  • golang 命令行解析库cobra的使用

    golang 命令行解析库cobra的使用 ​ 关于go语言的命令行解析,标准库flag提供的功能比较...

  • Go-flag包解析

    简介 godoc-flag 标准库-命令行参数解析flag cobra-解析命令 功能:flag实现命令行解析 使...

  • Golang获取命令行参数

    使用os.Args获取命令行参数 终端命令:go run main.go 20 马超 true 20 使用flag...

  • Golang学习笔记-flag

    使用flag包可以用来解析命令行参数,flag.TypeVar()用于定义参数并绑定到指定变量,flag.Type...

  • Go命令行类库推荐

    项目描述 go命令行管理工具,go 原生提供了flag管理命令行。使用起来诸多不便,所以整理如下框架实现。 使用入...

  • Golang标准库——flag

    flag包实现了命令行参数的解析。要求:使用flag.String(), Bool(), Int()等函数注册fl...

  • go 工具库 flag

    工作中,经常需要开发一下命令行小工具,需要用到命令解析的功能,go flag 库可以快速的帮我们实现。 flag....

  • go 命令行解析工具库 flag

    工作中,经常需要开发一下命令行小工具,需要用到命令解析的功能,go flag 库可以快速的帮我们实现。 flag....

  • go语言如何在编译阶段给变量赋值

    go语言如何在编译阶段给变量赋值 如何使用"go build -ldflags -X"命令行参数给package变...

网友评论

    本文标题:如何使用go做命令行flag解析

    本文链接:https://www.haomeiwen.com/subject/fbexnktx.html