在日常测试中,我们有时候不想把参数硬编码写死,往往会写配置。测试阶段我们经常使用的技巧就是命令行传参,介绍两种常用的方式:

方式一:os包

func main() {
//1.os.Args会把命令行参数以数组方式存起来 用起来不是很方便
if len(os.Args) > 0 {
for i, v := range os.Args {
logs.Debug("第%d个参数: %v",i,v)
}
  }
}


方式二:flag包

func main() {
//1.os.Args会把命令行参数以数组方式存起来 用起来不是很方便
//if len(os.Args) > 0 {
// for i, v := range os.Args {
// logs.Debug("第%d个参数: %v",i,v)
// }
//}


//2.golang flag使用
//flag包支持的命令行参数类型: bool、int、int64、uint、uint64、float float64、string、duration
//传参常用格式:
//-flag xxx (使用空格,一个-符号)
//还支持:-flag=xxx (使用等号,一个-符号)
//--flag xxx (使用空格,两个-符号)
//--flag=xxx (使用等号,两个-符号)
//注意:使用bool类型必须使用等号方式 常用:-flag=xxx


var bucket, key string
var timeout time.Duration
var count int
var married bool
var money float64
//第一个参数表示要绑定到的类型地址 第二个参数表示的命令行中的flag名字 第三个参数表示的默认值 第四个参数为描述 当flag参数写错了 会用这个描述提示
flag.StringVar(&bucket, "b", "", "Bucket name.")
flag.StringVar(&key, "k", "", "Object key name.")
flag.DurationVar(&timeout, "d", 0, "Upload timeout.")
flag.IntVar(&count,"c",0,"count num")
flag.BoolVar(&married,"m",false,"married flag")
flag.Float64Var(&money,"mo",0,"money flag")


//必须要parse才会把命令行中的参数 绑定到对应的指针变量中
flag.Parse()


logs.Debug("bucket=%v key=%v timeout=%v count=%v married=%v money=%v",bucket,key,timeout, count,married,money)
}

注意下上面的不同类型的flag参数的有效值:

flag参数类型
有效值
string
合法字符串
int、int64、uint、uint641234、0664、0x1234等类型,可以是负数。
float float64合法浮点数
bool

只能是指定枚举值:

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

duration

任何合法的时间段字符串。

如”30s”、”1.2h”、”2h5m”。 

合法的单位有”ns” ”us” “µs” ”ms” ”s” ”m” ”h”

学习如逆水行舟,不进则退!加油!