func
func StringVar(p *, name , value , usage )
StringVar定义了一个有指定名字,默认值,和用法说明的string标签。 参数p指向一个存储标签解析值的string变量。
通俗来说,在命令行输入命令,后面可以带上 -xxx xx 这样的参数。
通过下面例子来理解:// TestFlag project main.gopackage mainimport ( "flag" "fmt" "os")func main() { //定义变量args,用来存放指定参数名的参数内容 var args string //StringVar定义了一个有指定名字,默认值,和用法说明的string标签。参数p指向一个存储标签解析值的string变量。 //Args 指定参数名 应用的时候 在命令行输入 -Args xxx //defaultValue 如果没有指定Args的值,那么Args的内容默认是"defaultValue" //Usage 用法说明字符串 flag.StringVar(&args, "Args", "defaultValue", "Usage:xxx") //解析上面定义的标签 flag.Parse() fmt.Println("Args1:", flag.Arg(0)) fmt.Println("Args2:", flag.Arg(1)) fmt.Println("Args3:", flag.Arg(2)) fmt.Println("String args:", args) fmt.Println("os.Args[0]:", os.Args[0]) fmt.Println("os.Args[1]:", os.Args[1]) fmt.Println("os.Args[2]:", os.Args[2])}
- 编译后,在命令行执行下面命令:
Testflag -Args a 111 222 333输出结果如下:Args1: 111Args2: 222Args3: 333String args: aos.Args[0]: Testflagos.Args[1]: -Argsos.Args[2]: a
- 然后,再看看调换参数位置后的输出结果
Testflag 111 222 333 -Args a结果如下:Args1: 111Args2: 222Args3: 333String args: defaultValueos.Args[0]: Testflagos.Args[1]: 111os.Args[2]: 222
-Args 放在后面,为什么没有被正确解析出来? 这是因为解析到非FLag变量就停止解析Flag参数了。所以,flag参数应该放在普通参数的前面指定。
- 如果不指定 -Args参数,那么这个参数默认值就是defaultValue
Testflag 111 222 333结果如下:Args1: 111Args2: 222Args3: 333String args: defaultValueos.Args[0]: Testflagos.Args[1]: 111os.Args[2]: 222
posted on 2016-11-30 17:43 阅读( ...) 评论( ...)