Go語言-flag使用

flag包

實現了命令行的flag解析

用法

  • func String(name string, value string, usage string) *string
    String 定義了一個指定名字爲name的string類型flag,默認值爲value,用法usage.返回值是string類型的地址,存放了flage對應的值

  • func StringVar(p *string, name string, value string, usage string)
    StringVar 定義了指定名字爲name的string類型的flage,默認值爲value,用法爲usage.參數p指針指向存在flag值的空間.

  • func Var(value Value, name string, usage string)
    Var 定義了指定名字name和用法的flag.第一個入參爲flag的值,類型爲Value,可以存放用戶自定義實現的Value.舉個例子,用戶可以創建一個flag,傳入參數用逗號分割,放入一個切片裏.

  • func Args() []string
    Args 返回沒有flag的命令行參數.

實例1

package main

import (
    "errors"
    "flag"
    "fmt"
    "strings"
    "time"
)

var species = flag.String("species", "gopher", "the species we are studying")

var gopherType string
var gopherType1 string
var intervalFlag interval

func init() {

    const (
        defaultGopher = "pocket"
        usage         = "the variety of gopher"
    )
    flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)
    flag.StringVar(&gopherType1, "g", defaultGopher, usage+" (shorthand)")
    flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")
}

type interval []time.Duration

func (i *interval) String() string {
    return fmt.Sprint(*i)
}

func (i *interval) Set(value string) error {
    if len(*i) > 0 {
        return errors.New("interval flag already set")
    }

    for _, dt := range strings.Split(value, ",") {
        duration, err := time.ParseDuration(dt)
        if err != nil {
            return err
        }

        *i = append(*i, duration)
    }

    return nil
}

func main() {
    flag.Parse()
    fmt.Println("species:", *species)
    fmt.Println("gopherType:", gopherType)
    fmt.Println("gopherType1:", gopherType1)
    fmt.Println("intervalFlag:", intervalFlag)
}

編譯運行

     go build flag.go 

    ./flag  -species dog -g chicken -gopher_type bird -deltaT 10s,15s,1m,1h

運行結果

species: dog
gopherType: bird
gopherType1: chicken
intervalFlag: [10s 15s 1m0s 1h0m0s]

實例2

package main

import (
    "fmt"
    "flag"
)

func main() {
    flag.Parse()
    args := flag.Args()

    for index, val := range args {
        fmt.Printf("arg%v: %v \n", index, val)
    }
    return
}

運行結果

arg0: 123 
arg1: 123 
arg2: 345 
arg3: 678 

實例3

package main

import (
    "fmt"
    "os"
)

func main() {
    for index, val := range os.Args {
        fmt.Printf("arg%v: %v \n", index, val)
    }
    return
}

運行結果

arg0: ./flag2
arg1: 123 
arg2: 123 
arg3: 345 
arg4: 678 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章