go 命令行解析工具库 flag

2022-04-29  本文已影响0人  wayyyy

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

var (
    intFlag    int
    boolFlag   bool
    stringFlag string
)

func initCommand() {
    flag.BoolVar(&boolFlag, "boolFlag", false, "bool flag value")
    flag.IntVar(&intFlag, "intFlag", 0, "int flag value")
    flag.StringVar(&stringFlag, "stringFlag", "default", "string flag value")
}

func main() {
    initCommand()

    flag.Parse()

    fmt.Println("bool flag:", boolFlag)
    fmt.Println("int flag:", intFlag)
    fmt.Println("string flag:", stringFlag)
}

flag.IntVar(&intFlag, "intFlag", 0, "int flag value") 表示以形如 -intFlag 10格式解析一个 int 型参数。默认值为0, 解析出来的值等于 intFlag

命令行格式

支持3种命令行格式:

-flag  或者 --flag
-flag=x 或者 --flag=x
-flag x 或者 --flag x  // 非布尔类型才支持这种方式

- 和 -- 都可以使用,对于flag库它们的作用是一样的。
不带参数,输出默认值:

# ./flag 
bool flag: false
int flag: 0
string flag: default

字符串参数,需要使用""

# ./flag --stringFlag hello world
bool flag: false
int flag: 0
string flag: hello

# ./flag --stringFlag "hello world"
bool flag: false
int flag: 0
string flag: hello world

遇到第一个非选项参数(即不是以---开头的)或--,解析停止

# ./flag -intFlag 10 -- -boolFlag true 
bool flag: false
int flag: 10
string flag: default

# ./flag -intFlag 10 str -boolFlag true
bool flag: false
int flag: 10
string flag: default
flag 支持的参数类型

flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration。

flag参数 有效值
flag.StringVar 合法字符串
flag.IntVar 1234、0664、0x1234等类型,也可以是负数。
浮点数flag 合法浮点数。
flag.BoolVar 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。
flag.DurationVar 任何合法的时间段字符串。如”300ms”、”-1.5h”、”2h45m” 合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。
长短型

前面提到flag 库 -v 和 --v 是一样的。但有时我们希望支持
-v--version,我们可以如下实现:

flag.BoolVar(&versionFlag, "v", false, "version flag value")
flag.BoolVar(&versionLongFlag, "version", false, "long version flag value")
子命令

参考资料
1、https://zhuanlan.zhihu.com/p/93321906
2、https://zhuanlan.zhihu.com/p/102579462

上一篇 下一篇

猜你喜欢

热点阅读