go语言学习-flag包的使用

#一、命令行语法
命令行语法主要有以下几种形式:

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

以上语法对于一个或两个‘-’号是一样的

对于整形flag,合法的值可以为1234,0664,0x1234或负数等。对于布尔型flag,可以为1,0,t,f,T,F,true,false,TRUE,FALSE,True,False等
#二、命令行参数方法
###(1)定义flag参数
参数有三个:第一个为参数名称,第二个为默认值,第三个是说明

(1) 通过flag.String(),Bool(),Int() 等flag.Xxx()方法,该种方式返回一个相应的指针
var ip = flag.Int("flagname", 1234, "help message for flagname")
(2) 通过flag.XxxVar()方法将flag绑定到一个变量,该种方式返回值类型,如
var flagvar int
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")

#####(3) 通过flag.Var()绑定自定义类型,自定义类型需要实现Value接口(Receives必须为指针),如

flag.Var(&flagVal, "name", "help message for flagname")

###(2)调用flag.Parse()解析命令行参数到定义的flag

flag.Parse()

解析函数将会在碰到第一个非flag命令行参数时停止,非flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd --flag=true abc则第一个非flag命令行参数为“abc”
###(3)调用Parse解析后,就可以直接使用flag本身(指针类型)或者绑定的变量了(值类型)

fmt.Println("flagvar has value ", flagvar)

还可通过flag.Args(), flag.Arg(i)来获取非flag命令行参数

下面是具体的实例:

package main

import (
	"flag"
	"fmt"
)

func main() {

	a := flag.Int("a",1000,"a 的值")
	fmt.Println("a :",a) //a是一个指针类型的变量
	fmt.Println("*a ;",*a)//*a 的值是1000

	var b int
	//通过flag.XxxVar()方法将flag绑定到一个变量,该种方式返回值类型
	//此处我们给int类型额变量b 通过方法flag.IntVar()给b 绑定一个变量
	flag.IntVar(&b,"b",2000,"b 的值")
	fmt.Println("b : ",b)


	name := flag.String("name","lili","Input your username")

	//调用flag.Parse()方法,解析命令行
	flag.Parse()

	//如果命令行有值则覆盖,没有则使用默认值
	fmt.Println("my name is ",*name)
}

什么命令参数也不跟

./studyFlag 

输出结果如下:

a : 0x1830e0f0
*a ; 1000
b :  2000
my name is  lili //此处name的值是默认值

启动时命令行,下面四种效果相同

./studyFlag -name chun
./studyFlag -name=chun
./studyFlag --name chun
./studyFlag --name=chun

执行结果如下:

a : 0x1830c0f0
*a ; 1000
b :  2000
my name is  chun //可以看到此处name的值变成了我们输入的参数

注意的地方是,在同一个程序中flag.xxx()的第一个参数name和flag.xxx.Var()和第二个参数name,他们各自都不能出现相同name的参数,一个name只能出现一次,如果出现多次编译器会报错

欢迎关注问我团队公众号:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值