美文网首页
go 命令行解析工具库 flag

go 命令行解析工具库 flag

作者: wayyyy | 来源:发表于2022-04-29 00:00 被阅读0次

    工作中,经常需要开发一下命令行小工具,需要用到命令解析的功能,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

    相关文章

      网友评论

          本文标题:go 命令行解析工具库 flag

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