// TestFlag2 project main.go
package main
import (
"flag"
"fmt"
)
func main() {
//定義Flag
//方式一:通過flag.String(), Bool(), Int() 等flag.Xxx()方法,該種方式返回一個相應的指針
namePtr := flag.String("name", "Anson", "user's name")
agePtr := flag.Int("age", 22, "user's age")
vipPtr := flag.Bool("vip", true, "is a vip user")
//方式二:通過flag.XxxVar()方法將flag綁定到一個變量,該種方式返回值類型
var email string
flag.StringVar(&email, "email", "abc@gmail.com", "user's email")
//還有第三種方式,通過flag.Var()綁定自定義類型,自定義類型需要實現Value接口(Receives必須為指針)
//flag.Var(&flagVal, "name", "help message for flagname")
//解析命令行參數,值保存到定義的flag
flag.Parse()
//調用Parse解析后,就可以直接使用flag本身(指針類型)或者綁定的變量了(值類型)
//還可通過flag.Args(), flag.Arg(i)來獲取非flag命令行參數
others := flag.Args() //保存Flag以外的變量
fmt.Println("name:", *namePtr)
fmt.Println("age:", *agePtr)
fmt.Println("vip:", *vipPtr)
fmt.Println("email:", email)
fmt.Println("other:", others)
fmt.Println("---------")
for i := 0; i < len(flag.Args()); i++ {
fmt.Println("Arg", i, "=", flag.Arg(i))
}
}
執行結果:
testflag2 -name aa -age 33 -vip=false aaa bbb ccc 111 222 name: aa age: 33 vip: false email: abc@gmail.com other: [aaa bbb ccc 111 222] --------- Arg 0 = aaa Arg 1 = bbb Arg 2 = ccc Arg 3 = 111 Arg 4 = 222
