候鸟Anson

候鸟,随四季交替而迁徙。 我的人生,也如候鸟一般,随年龄变化而迁徙。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

func StringVar

func StringVar(p *string, name string, value string, usage string)

StringVar定义了一个有指定名字,默认值,和用法说明的string标签。 参数p指向一个存储标签解析值的string变量。

通俗来说,在命令行输入命令,后面可以带上 -xxx xx 这样的参数。
通过下面例子来理解:

// TestFlag project main.go
package main

import (
	"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: 111
Args2: 222
Args3: 333
String args: a
os.Args[0]: Testflag
os.Args[1]: -Args
os.Args[2]: a
  •  然后,再看看调换参数位置后的输出结果
Testflag 111 222 333 -Args a

结果如下:
Args1: 111
Args2: 222
Args3: 333
String args: defaultValue
os.Args[0]: Testflag
os.Args[1]: 111
os.Args[2]: 222

-Args 放在后面,为什么没有被正确解析出来? 这是因为解析到非FLag变量就停止解析Flag参数了。所以,flag参数应该放在普通参数的前面指定。

  • 如果不指定 -Args参数,那么这个参数默认值就是defaultValue
Testflag 111 222 333

结果如下:
Args1: 111
Args2: 222
Args3: 333
String args: defaultValue
os.Args[0]: Testflag
os.Args[1]: 111
os.Args[2]: 222

 

posted on 2016-11-30 17:43  候鸟Anson  阅读(2241)  评论(0编辑  收藏  举报