Go 用flag包解析命令行参数

参数形式

flag包能解析的参数有如下四种形式,使用的时候分三种类型:

类型一
cmd -flag=x // 支持所有类型
cmd -flag x // 只支持非bool类型

类型二
cmd -flag // 只支持bool类型

类型三
cmd abc // 没有flag的参数


类型一

cmd -flag=x
cmd -flag x //只支持非bool类型

定义参数

有两种形式,下方Xxx代表类型

  1. flag.Xxx()

    flag.String(), Bool(), Int() 这种形式返回一个指向该参数的指针

    例子

    var date = flag.Int("d", 20171107, "help message for date") 
    
    flag.Parse()

    注意 date 是指向 -d 参数值的指针

    若在命令行输入 -d=20121212 -a=20 或者 -d 20121212 -a 20,则我们在程序中即可用 *date 取得 -d 的值20121212

    若只输入 -a=20 或者 -a 20,因为缺省标志 -d ,则 *date 取到的是 -d 定义中的默认值 20171107

  2. flag.XxxVar()

    flag.StringVar(), BoolVar(), IntVar() 这种形式把参数绑定到一个变量

    例子

    var age int
    
    flag.IntVar(&age, "a", 18, "help message for age")
    
    flag.Parse()

    命令行输入-d=20121212 -a=20 或者-d=20121212 -a 20 ,在程序里 变量age 则获取到 -a 的值 20

    若只输入-d=20121212 或者-d=20121212,缺省标志-a, 则 变量age 获取定义中的默认值 18

解析参数

注意到上面例子最后都带有一行 flag.Parse()

因为定义好参数后,只有调用方法 flag.Parse() 解析命令行参数到定义的flag,这样我们才能使用上面两个例子的 *date 和 age 取得对应flag的参数值


类型二——不带参数的标志

cmd -flag //该形式只支持bool类型,对应的值是1, 0, t, f, true, false, TRUE, FALSE, True, False

默认的,如果我们在命令行里提供了-flag,则其对应的值为true,否则为flag.Bool/BoolVar中指定的默认值;如果希望显示设置为false则使用-flag=false。

例子

var exist_f = flag.Bool("f", false, "help message for format")

flag.Parse()

当在命令行输入 -d=123 -f 时,程序里 *exist_f 的值就为 true 了

若命令行只输入 -d=123 时,因为缺省-f,*exist_f 的值为事先定义中默认的 false


类型三——不带标志的命令行参数

cmd abc //没有flag的参数

  1. 通过 flag.Args() 获取非flag参数列表

  2. 通过 flag.Arg(i) 来获取非flag命令行第i个参数,i 从 0 开始

  3. 还可以通过flag.NArg() 获得非flag参数个数

例子

当命令行敲入 -d 20121212 -a 20 Huang JiaMing ,最后两个值即为不带标志的参数

...

flag.Parse()

var fullName = flag.Args() // fullName = ['Huang', 'JiaMing']

var firstName = flag.Arg(0) // firstName = Huang

var lastName = flag.Arg(1) // lastName = JiaMing

var num = flag.NArg() // num = 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言中的flag提供了一种方便的方式来解析命令行参数。它可以将命令行参数解析为Go语言中的变量,并提供了一些选项来设置默认值、帮助信息等。 下面是一个简单的示例,演示如何使用flag解析命令行参数: ```go package main import ( "flag" "fmt" ) func main() { // 定义命令行参数 var name string var age int var married bool flag.StringVar(&name, "name", "张三", "姓名,默认张三") flag.IntVar(&age, "age", 18, "年龄,默认18") flag.BoolVar(&married, "married", false, "婚否,默认false") // 解析命令行参数 flag.Parse() // 输出命令行参数 fmt.Printf("姓名:%s\n", name) fmt.Printf("年龄:%d\n", age) fmt.Printf("婚否:%v\n", married) } ``` 在这个示例中,我们使用了`flag.StringVar`、`flag.IntVar`和`flag.BoolVar`来定义命令行参数,分别对应字符串、整数和布尔类型。这些函数都接受三个参数:一个指向变量的指针,参数名称和参数默认值。我们还可以使用`flag.Parse()`来解析命令行参数,并在程序中使用这些参数。 在命令行中运行这个程序,可以使用以下命令行参数: ```shell ./example -name=李四 -age=20 -married=true ``` 这将输出: ``` 姓名:李四 年龄:20 婚否:true ``` 我们还可以使用`flag.Usage`来设置命令行帮助信息,例如: ```go flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS]\n", os.Args[0]) flag.PrintDefaults() } ``` 这将在命令行中运行程序时显示帮助信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值