?
? ????? PHP ??? ???? ??? ?? ??
import "flag"
概述
索引
例子
Flag 包實現(xiàn)了命令行標志解析。
用法:
使用 flag.String(),Bool(),Int() 等定義標志。
這聲明了一個整型 flag,-flagname,都存儲在指針 ip 中,類型為 *int 。
import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")
如果你喜歡,你可以使用 Var() 函數(shù)將標志綁定到一個變量。
var flagvar int func init() { flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")}
或者,您可以創(chuàng)建滿足 Value 接口(使用指針接收器)的自定義標志,并將它們耦合以標記解析
flag.Var(&flagVal, "name", "help message for flagname")
對于這樣的標志,默認值只是變量的初始值。
所有標志定義后,調(diào)用
flag.Parse()
來將命令行解析為定義的標志。
標志可以直接使用。如果你自己使用標志,它們都是指針; 如果你綁定到變量,它們就是值。
fmt.Println("ip has value ", *ip)fmt.Println("flagvar has value ", flagvar)
解析后,標志后面的參數(shù)可用作切片 flag.Args() 或單獨作為 flag.Arg(i)。參數(shù)從 0 到 flag.NArg()- 1 索引。
命令行標志語法:
-flag-flag=x-flag x // 僅限非布爾標志
可以使用一個或兩個減號;它們是等價的。由于命令的含義,最后一種形式不允許用于布爾標志
cmd -x *
如果有一個名為 0,false 等的文件,它將會改變。你必須使用 -flag = false 來關(guān)閉布爾標志。
標志解析在第一個非標志參數(shù)(“ - ”是非標志參數(shù))之前停止,或者在終止符“ - ”之后停止。
整數(shù)標志接受 1234,0664,0x1234 并且可能是負數(shù)。布爾標志可能是:
1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False
持續(xù)時間標志接受對 time.ParseDuration 有效的任何輸入。
默認的一組命令行標志由頂層函數(shù)控制。FlagSet 類型允許您定義獨立的標志集,例如在命令行界面中實現(xiàn)子命令。FlagSet 的方法類似于命令行標志集的頂層函數(shù)。
// 這些示例演示了對標志包的更復(fù)雜的使用。package mainimport ("errors""flag""fmt""strings""time")// 示例1:名為“species”的單個字符串標志,默認值為“gopher”。var species = flag.String("species", "gopher", "the species we are studying")// 示例2:共享變量的兩個標志,因此我們可以使用速記。// 初始化的順序是未定義的,因此請確保兩者都使用// 相同的默認值。 必須使用init函數(shù)設(shè)置它們。var gopherType string func init() {const ( defaultGopher = "pocket" usage = "the variety of gopher") flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage) flag.StringVar(&gopherType, "g", defaultGopher, usage+" (shorthand)")}// 示例3:用戶定義的標志類型,持續(xù)時間片。type interval []time.Duration// String是格式化標志值的方法,是flag.Value接口的一部分。// String方法的輸出將用于診斷。func (i *interval) String() string {return fmt.Sprint(*i)}// Set是設(shè)置標志值的方法,flag.Value接口的一部分。// Set的參數(shù)是要解析以設(shè)置標志的字符串。// 這是一個以逗號分隔的列表,因此我們將其拆分。func (i *interval) Set(value string) error {// 如果我們想允許多次設(shè)置標志,// 累積值,我們將刪除此if語句。// 這將允許諸如此類的用法// -deltaT 10s -deltaT 15s// 和其他組合。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}// 定義一個標志來累積持續(xù)時間。 因為它有特殊的類型,// 我們需要使用Var函數(shù),因此在期間創(chuàng)建標志// init。var intervalFlag interval func init() {// 將命令行標志綁定到intervalFlag變量和// 設(shè)置用法消息。 flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")}func main() {// 所有有趣的部分都是上面聲明的變量,但是// 要使標志包能夠看到那里定義的標志,就必須這樣做// 執(zhí)行,通常在main(不是init?。┑拈_頭執(zhí)行:// flag.Parse()// 我們不在這里運行它,因為這不是主要功能//測試套件已經(jīng)解析了標志。}
Variables
func Arg(i int) string
func Args() []string
func Bool(name string, value bool, usage string) *bool
func BoolVar(p *bool, name string, value bool, usage string)
func Duration(name string, value time.Duration, usage string) *time.Duration
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
func Float64(name string, value float64, usage string) *float64
func Float64Var(p *float64, name string, value float64, usage string)
func Int(name string, value int, usage string) *int
func Int64(name string, value int64, usage string) *int64
func Int64Var(p *int64, name string, value int64, usage string)
func IntVar(p *int, name string, value int, usage string)
func NArg() int
func NFlag() int
func Parse()
func Parsed() bool
func PrintDefaults()
func Set(name, value string) error
func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Uint(name string, value uint, usage string) *uint
func Uint64(name string, value uint64, usage string) *uint64
func Uint64Var(p *uint64, name string, value uint64, usage string)
func UintVar(p *uint, name string, value uint, usage string)
func UnquoteUsage(flag *Flag) (name string, usage string)
func Var(value Value, name string, usage string)
func Visit(fn func(*Flag))
func VisitAll(fn func(*Flag))
type ErrorHandling
類型標志
func Lookup(name string) *Flag
type FlagSet
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))
type Getter
type Value
包
flag.go
CommandLine 是從 os.Args 解析的默認命令行標志集。頂級函數(shù)(如 BoolVar,Arg 等)是 CommandLine方法的包裝器。
var CommandLine = NewFlagSet(os.Args[0], ExitOnError)
如果調(diào)用了 -help 或 -h 標志但沒有定義這樣的標志,ErrHelp 是返回的錯誤。
var ErrHelp = errors.New("flag: help requested")
用法向標準錯誤輸出記錄所有定義的命令行標志的用法消息。它在解析標志時發(fā)生錯誤時被調(diào)用。該函數(shù)是一個可以更改為指向自定義函數(shù)的變量。默認情況下,它打印一個簡單的標題并調(diào)用 PrintDefaults ; 有關(guān)輸出格式以及如何控制它的詳細信息,請參閱 PrintDefaults 的文檔。
var Usage = func() { fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) PrintDefaults()}
func Arg(i int) string
Arg 返回第 i 個命令行參數(shù)。Arg(0)是標志處理后的第一個剩余參數(shù)。如果請求的元素不存在,則 Arg 返回一個空字符串。
func Args() []string
Args 返回非標志命令行參數(shù)。
func Bool(name string, value bool, usage string) *bool
Bool 定義了一個具有指定名稱,默認值和用法字符串的布爾標志。返回值是存儲標志值的 bool 變量的地址。
func BoolVar(p *bool, name string, value bool, usage string)
BoolVar 定義了一個具有指定名稱,默認值和用法字符串的布爾標志。參數(shù) p 指向一個存儲標志值的 bool 變量。
func Duration(name string, value time.Duration, usage string) *time.Duration
持續(xù)時間定義了一個帶指定名稱,缺省值和用法字符串的 time.Duration 標志。返回值是存儲標志值的 time.Duration 變量的地址。該標志接受 time.ParseDuration 可接受的值。
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
DurationVar 定義了一個具有指定名稱,缺省值和用法字符串的 time.Duration 標志。參數(shù) p 指向一個用于存儲標志值的 time.Duration 變量。該標志接受 time.ParseDuration 可接受的值。
func Float64(name string, value float64, usage string) *float64
Float64 定義了一個帶有指定名稱,缺省值和用法字符串的 float64 標志。返回值是存儲標志值的 float64 變量的地址。
func Float64Var(p *float64, name string, value float64, usage string)
Float64Var 定義了一個帶有指定名稱,缺省值和用法字符串的 float64 標志。參數(shù) p 指向一個 float64 變量,用于存儲標志的值。
func Int(name string, value int, usage string) *int
Int 定義了一個具有指定名稱,默認值和用法字符串的 int 標志。返回值是存儲標志值的 int 變量的地址。
func Int64(name string, value int64, usage string) *int64
Int64 定義了一個具有指定名稱,缺省值和用法字符串的 int64 標志。返回值是存儲標志值的 int64 變量的地址。
func Int64Var(p *int64, name string, value int64, usage string)
Int64Var 定義了一個帶有指定名稱,默認值和用法字符串的 int64 標志。參數(shù) p 指向一個 int64 變量,用于存儲標志的值。
func IntVar(p *int, name string, value int, usage string)
IntVar 定義了一個具有指定名稱,默認值和用法字符串的 int 標志。參數(shù) p 指向一個 int 變量,用于存儲標志的值。
func NArg() int
NArg 是標志處理后剩余的參數(shù)數(shù)量。
func NFlag() int
NFlag 返回已設(shè)置的命令行標志的數(shù)量。
func Parse()
解析解析 os.Args1:中的命令行標志。必須在定義了所有標志之后并且在程序訪問標志之前調(diào)用。
func Parsed() bool
Parsed 報告命令行標志是否已被解析。
func PrintDefaults()
除非另行配置,否則 PrintDefaults 會打印標準錯誤,顯示所有已定義的命令行標志的默認設(shè)置。對于整數(shù)值標志 x,默認輸出具有該形式
-x int usage-message-for-x (default 7)
除了帶有單字節(jié)名稱的布爾標志之外,用法消息將顯示在單獨的行上。對于 bool 標志,類型被省略,并且如果標志名稱是一個字節(jié),則使用消息出現(xiàn)在同一行上。如果默認值是類型的零值,則省略括號默認值。列出的類型(這里是 int)可以通過在標志的使用字符串中放置一個反引號的名稱來更改; 消息中的第一個這樣的項目被視為在消息中顯示的參數(shù)名稱,并且在顯示時從消息中除去后面的引號。例如,給出
flag.String("I", "", "search `directory` for include files")
輸出將是
-I directory search directory for include files.
func Set(name, value string) error
Set 設(shè)置命名的命令行標志的值。
func String(name string, value string, usage string) *string
字符串定義了一個具有指定名稱,缺省值和用法字符串的字符串標志。返回值是存儲標志值的字符串變量的地址。
func StringVar(p *string, name string, value string, usage string)
StringVar 定義了一個具有指定名稱,默認值和用法字符串的字符串標志。參數(shù) p 指向一個字符串變量,用于存儲標志的值。
func Uint(name string, value uint, usage string) *uint
Uint 定義一個具有指定名稱,默認值和用法字符串的 uint 標志。返回值是存儲標志值的 uint 變量的地址。
func Uint64(name string, value uint64, usage string) *uint64
Uint64 定義了一個具有指定名稱,默認值和用法字符串的 uint64 標志。返回值是存儲標志值的 uint64 變量的地址。
func Uint64Var(p *uint64, name string, value uint64, usage string)
Uint64Var 定義了一個具有指定名稱,默認值和用法字符串的 uint64 標志。參數(shù) p 指向一個 uint64 變量,用于存儲標志的值。
func UintVar(p *uint, name string, value uint, usage string)
UintVar 定義了一個具有指定名稱,默認值和用法字符串的 uint 標志。參數(shù) p 指向一個存儲標志值的 uint 變量。
func UnquoteUsage(flag *Flag) (name string, usage string)
UnquoteUsage 從標志的用法字符串中提取一個反引號的名稱,并返回它和未加引號的用法。給定“ name
顯示”它返回(“名稱”,“顯示的名稱”)。如果沒有后引號,則該名稱是對標志值類型的合理猜測,如果標志為布爾值,則為空字符串。
func Var(value Value, name string, usage string)
Var 定義了一個具有指定名稱和用法字符串的標志。標志的類型和值由 Value 類型的第一個參數(shù)表示,它通常包含 Value 的用戶定義實現(xiàn)。例如,調(diào)用者可以創(chuàng)建一個標志,通過為切片提供 Value 的方法來將逗號分隔的字符串轉(zhuǎn)換為一段字符串; 特別是 Set 會將逗號分隔的字符串分解成片。
func Visit(fn func(*Flag))
Visit 按照字典順序訪問命令行標志,為每個標志調(diào)用 fn 。它只訪問已設(shè)置的標志。
func VisitAll(fn func(*Flag))
VisitAll 按照字典順序訪問命令行標志,為每個命令調(diào)用 fn 。它訪問所有的標志,甚至沒有設(shè)置。
ErrorHandling 定義了解析失敗時 FlagSet.Parse 的行為。
type ErrorHandling int
如果解析失敗,這些常量會導(dǎo)致 FlagSet.Parse 的行為與所述相同。
const ( ContinueOnError ErrorHandling = iota // Return a descriptive error. ExitOnError // Call os.Exit(2). PanicOnError // Call panic with a descriptive error.)
一個標志表示一個標志的狀態(tài)。
type Flag struct { Name string // name as it appears on command line Usage string // help message Value Value // value as set DefValue string // default value (as text); for usage message}
func Lookup(name string) *Flag
Lookup 返回指定命令行標志的標志結(jié)構(gòu),如果不存在則返回 nil 。
FlagSet 表示一組定義的標志。FlagSet 的零值沒有名稱,并且具有 ContinueOnError 錯誤處理。
type FlagSet struct { // Usage is the function called when an error occurs while parsing flags. // The field is a function (not a method) that may be changed to point to // a custom error handler. Usage func() // contains filtered or unexported fields}
func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet
NewFlagSet 使用指定的名稱和錯誤處理屬性返回一個新的空標志集。
func (f *FlagSet) Arg(i int) string
Arg 返回第 i 個參數(shù)。Arg(0)是標志處理后的第一個剩余參數(shù)。如果請求的元素不存在,則 Arg 返回一個空字符串。
func (f *FlagSet) Args() []string
Args 返回非標志參數(shù)。
func (f *FlagSet) Bool(name string, value bool, usage string) *bool
Bool 定義了一個具有指定名稱,默認值和用法字符串的布爾標志。返回值是存儲標志值的 bool 變量的地址。
func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
BoolVar 定義了一個具有指定名稱,默認值和用法字符串的布爾標志。參數(shù) p 指向一個存儲標志值的 bool 變量。
func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
持續(xù)時間定義了一個帶指定名稱,缺省值和用法字符串的 time.Duration 標志。返回值是存儲標志值的 time.Duration 變量的地址。該標志接受 time.ParseDuration 可接受的值。
func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
DurationVar 定義了一個具有指定名稱,缺省值和用法字符串的 time.Duration 標志。參數(shù) p 指向一個用于存儲標志值的 time.Duration 變量。該標志接受 time.ParseDuration 可接受的值。
func (f *FlagSet) Float64(name string, value float64, usage string) *float64
Float64 定義了一個帶有指定名稱,缺省值和用法字符串的 float64 標志。返回值是存儲標志值的 float64 變量的地址。
func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string)
Float64Var 定義了一個帶有指定名稱,缺省值和用法字符串的 float64 標志。參數(shù) p 指向一個 float64 變量,用于存儲標志的值。
func (f *FlagSet) Init(name string, errorHandling ErrorHandling)
Init 為標志集設(shè)置名稱和錯誤處理屬性。默認情況下,zero FlagSet 使用空名稱和 ContinueOnError 錯誤處理策略。
func (f *FlagSet) Int(name string, value int, usage string) *int
Int 定義了一個具有指定名稱,默認值和用法字符串的 int 標志。返回值是存儲標志值的 int 變量的地址。
func (f *FlagSet) Int64(name string, value int64, usage string) *int64
Int64 定義了一個具有指定名稱,缺省值和用法字符串的 int64 標志。返回值是存儲標志值的 int64 變量的地址。
func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string)
Int64Var 定義了一個帶有指定名稱,默認值和用法字符串的 int64 標志。參數(shù) p 指向一個 int64 變量,用于存儲標志的值。
func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
IntVar 定義了一個具有指定名稱,默認值和用法字符串的 int 標志。參數(shù) p 指向一個 int 變量,用于存儲標志的值。
func (f *FlagSet) Lookup(name string) *Flag
Lookup 返回指定標志的標志結(jié)構(gòu),如果不存在則返回 nil 。
func (f *FlagSet) NArg() int
NArg 是標志處理后剩余的參數(shù)數(shù)量。
func (f *FlagSet) NFlag() int
NFlag 返回已設(shè)置的標志數(shù)量。
func (f *FlagSet) Parse(arguments []string) error
解析解析參數(shù)列表中的標志定義,該列表不應(yīng)包含命令名稱。必須在 FlagSet 中的所有標志被定義之后且在程序訪問標志之前調(diào)用。如果設(shè)置了 -help 或 -h 但未定義,則返回值為 ErrHelp 。
func (f *FlagSet) Parsed() bool
Parsed 報告是否調(diào)用了f.Parse。
func (f *FlagSet) PrintDefaults()
PrintDefaults 將標準錯誤打印到集合中所有已定義的命令行標志的默認值。有關(guān)更多信息,請參閱全局函數(shù) PrintDefaults 的文檔。
func (f *FlagSet) Set(name, value string) error
Set 設(shè)置指定標志的值。
func (f *FlagSet) SetOutput(output io.Writer)
SetOutput 設(shè)置使用和錯誤消息的目的地。如果輸出為零,則使用 os.Stderr 。
func (f *FlagSet) String(name string, value string, usage string) *string
字符串定義了一個具有指定名稱,缺省值和用法字符串的字符串標志。返回值是存儲標志值的字符串變量的地址。
func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
StringVar 定義了一個具有指定名稱,默認值和用法字符串的字符串標志。參數(shù) p 指向一個字符串變量,用于存儲標志的值。
func (f *FlagSet) Uint(name string, value uint, usage string) *uint
Uint 定義一個具有指定名稱,默認值和用法字符串的 uint 標志。返回值是存儲標志值的 uint 變量的地址。
func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64
Uint64 定義了一個具有指定名稱,默認值和用法字符串的 uint64 標志。返回值是存儲標志值的 uint64 變量的地址。
func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string)
Uint64Var 定義了一個具有指定名稱,默認值和用法字符串的 uint64 標志。參數(shù) p 指向一個 uint64 變量,用于存儲標志的值。
func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string)
UintVar 定義了一個具有指定名稱,默認值和用法字符串的 uint 標志。參數(shù) p 指向一個存儲標志值的 uint 變量。
func (f *FlagSet) Var(value Value, name string, usage string)
Var 定義了一個具有指定名稱和用法字符串的標志。標志的類型和值由 Value 類型的第一個參數(shù)表示,它通常包含 Value 的用戶定義實現(xiàn)。例如,調(diào)用者可以創(chuàng)建一個標志,通過為切片提供 Value 的方法來將逗號分隔的字符串轉(zhuǎn)換為一段字符串;特別是 Set 會將逗號分隔的字符串分解成片。
func (f *FlagSet) Visit(fn func(*Flag))
Visit 按照字典順序訪問標志,為每個標志調(diào)用 fn 。它只訪問已設(shè)置的標志。
func (f *FlagSet) VisitAll(fn func(*Flag))
VisitAll 按字典順序訪問標志,為每個標志調(diào)用 fn 。它訪問所有的標志,甚至沒有設(shè)置。
Getter 是一個接口,允許檢索值的內(nèi)容。它包裝了 Value 接口,而不是其中的一部分,因為它出現(xiàn)在 Go 1 及其兼容性規(guī)則之后。此包提供的所有值類型均滿足 Getter 接口。
type Getter interface { Value Get() interface{}}
值是存儲在標志中的動態(tài)值的接口。(默認值表示為一個字符串。)
如果值的 IsBoolFlag() bool 方法返回 true,則命令行解析器將使 -name 等同于 -name = true,而不是使用下一個命令行參數(shù)。
對于每個存在的標志,集合都以命令行順序調(diào)用一次。標志包可以用一個零值接收者(例如零指針)調(diào)用 String 方法。
type Value interface { String() string Set(string) error}