//定义flags var inputName = flag.String("name", "Mathew", "Input your name") var inputAge = flag.Int("age", 26, "Input your age") var inputGender = flag.String("gender", "boy", "Input your gender")
funcmain(){ flag.Parse() //flag解析 for i := 0; i != flag.NArg(); i++ { fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i)) } fmt.Println("name=", *inputName) fmt.Println("age=", *inputAge) fmt.Println("gender=", *inputGender) }
使用flag
1 2 3 4 5 6 7 8
$ go build flag.go $ ./flag -h -age int Input your age (default 25) -gender string Input your gender (default "boy") -name string Input your name (default "Mathew")
1 2 3 4 5
$ ./flag mathew arg[0]=mathew name= Mathew age= 26 gender= boy
//flag为slice的默认值default is me,和return返回值没有关系 func(s *sliceValue)String()string { *s = sliceValue(strings.Split("default is me", ",")) return"It's none of my business" }
/* 可执行文件名 -slice="java,go" 最后将输出[java,go] 可执行文件名 最后将输出[default is me] */ funcmain(){ var languages []string flag.Var(newSliceValue([]string{}, &languages), "slice", "I like programming `languages`") flag.Parse()
//打印结果slice接收到的值 fmt.Println(languages) }
这样通过 -slice “go,php” 这样的形式传递参数,languages 得到的就是 [go, php]。如果不加-slice参数则打印默认值[default is me]。