日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go 的 flag 包可以解析命令行的参数

發布時間:2025/7/25 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 的 flag 包可以解析命令行的参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Go 的 flag 包可以解析命令行的參數。

?一、命令行語法

命令行語法主要有以下幾種形式:

cmd -flag ? ? ? // 只支持bool類型
cmd -flag=xxx
cmd -flag xxx ? // 只支持非bool類型

以上語法對于一個或兩個‘-’號是一樣的,即

cmd -flag xxx (使用空格,一個 - 符號)
cmd --flag xxx (使用空格,兩個 - 符號)
cmd -flag=xxx (使用等號,一個 - 符號)
cmd --flag=xxx (使用等號,兩個 - 符號)?

對于整形 flag,合法的值可以為 1234,0664,0x1234 或 負數 等。對于布爾型 flag,可以為 1,0,t,f,T,F,true,false,TRUE,FALSE,True,False 等

其中,布爾類型的參數比較特殊,為了防止解析時的二義性,應該使用 等號 的方式指定

二、命令行參數方法

1.?定義flag參數

參數有三個:第一個為 參數名稱,第二個為 默認值,第三個是 使用說明

1>?通過 flag.String()Bool()Int() 等 flag.Xxx() 方法,該種方式返回一個相應的指針

1 var ip = flag.Int("flagname", 1234, "help message for flagname")

2>?通過 flag.XxxVar() 方法將 flag 綁定到一個變量,該種方式返回 值類型,如

1 2 var flagvar int flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")

3> 通過 flag.Var() 綁定自定義類型,自定義類型需要實現 Value 接口 (Receiver 必須為指針),如

1 flag.Var(&flagVal, "name", "help message for flagname")

2. 調用 flag.Parse() 解析命令行參數到定義的 flag

1 flag.Parse()

解析函數將會在碰到第一個 非flag 命令行參數時停止,非flag 命令行參數是指不滿足命令行語法的參數,如命令行參數為 cmd --flag=true abc 則第一個 非flag 命令行參數為“abc”

3. 調用 Parse 解析后,就可以直接使用 flag 本身(指針類型)或者綁定的變量了(值類型)

1 fmt.Println("flagvar has value ", flagvar)

還可通過 flag.Args(), flag.Arg(i) 來獲取 非flag 命令行參數!

三、實例

1 2 3 4 5 6 7 8 9 10 11 12 package main import ( ??"flag" ??"fmt" ) ?? func main() { ??username := flag.String("name", "", "Input your username") ??flag.Parse() ??fmt.Println("Hello, ", *username) }

編譯:

1 go build flag.go

運行:

1 ./flag -name=world

輸出:

1 Hello, world

?

Go 還允許 自定義“命令行參數解析規則”,如下接口所示:

FlagSet 結構:

1 2 3 type FlagSet struct { ????????Usage func() }

示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package main import ( ????"flag" ????"fmt" ) var myFlagSet = flag.NewFlagSet("myflagset", flag.ExitOnError) var stringFlag = myFlagSet.String("abc", "default value", "help mesage") func main() { ????myFlagSet.Parse([]string{"-abc", "def", "ghi", "123"}) ????args := myFlagSet.Args() ????for i := range args { ????????fmt.Println(i, myFlagSet.Arg(i)) ????} }
  • func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet
  • func (f *FlagSet) Arg(i int) string
  • func (f *FlagSet) Args() []string
  • func (f *FlagSet) Bool(name string, value bool, usage string) *bool
  • func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
  • func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
  • func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
  • func (f *FlagSet) Float64(name string, value float64, usage string) *float64
  • func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string)
  • func (f *FlagSet) Init(name string, errorHandling ErrorHandling)
  • func (f *FlagSet) Int(name string, value int, usage string) *int
  • func (f *FlagSet) Int64(name string, value int64, usage string) *int64
  • func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string)
  • func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
  • func (f *FlagSet) Lookup(name string) *Flag
  • func (f *FlagSet) NArg() int
  • func (f *FlagSet) NFlag() int
  • func (f *FlagSet) Parse(arguments []string) error
  • func (f *FlagSet) Parsed() bool
  • func (f *FlagSet) PrintDefaults()
  • func (f *FlagSet) Set(name, value string) error
  • func (f *FlagSet) SetOutput(output io.Writer)
  • func (f *FlagSet) String(name string, value string, usage string) *string
  • func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
  • func (f *FlagSet) Uint(name string, value uint, usage string) *uint
  • func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64
  • func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string)
  • func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string)
  • func (f *FlagSet) Var(value Value, name string, usage string)
  • func (f *FlagSet) Visit(fn func(*Flag))
  • func (f *FlagSet) VisitAll(fn func(*Flag))

總結

以上是生活随笔為你收集整理的Go 的 flag 包可以解析命令行的参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。