1. 程式人生 > >flag--命令列引數定義多標籤示例

flag--命令列引數定義多標籤示例

// 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", "
[email protected]
", "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: [email protected]
other: [aaa bbb ccc 111 222]
---------
Arg 0 = aaa
Arg 1 = bbb
Arg 2 = ccc
Arg 3 = 111
Arg 4 = 222