Package flag

import "flag"
Overview
Index
Examples

Overview ▾

程序包标志实现命令行标志解析.

Usage

使用flag.String(),Bool(),Int()等定义标志.

这将声明一个整数标志-flagname,它存储在指针ip中,类型为* int.

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

如果愿意,可以使用Var()函数将标志绑定到变量.

var flagvar int
func init() {
	flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}

或者,您可以创建满足Value接口(带有指针接收器)的自定义标志,并将其耦合到标志解析

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

对于此类标志,默认值只是变量的初始值.

定义所有标志后,调用

flag.Parse()

将命令行解析为定义的标志.

然后可以直接使用标志. 如果您自己使用这些标志,它们都是指针. 如果您绑定到变量,它们就是值.

fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)

解析之后,标记后面的参数可以用作切片flag.Args()或单独用作flag.Arg(i). 参数从0到flag.NArg()-1进行索引.

Command line flag syntax

允许使用以下形式:

-flag
-flag=x
-flag x  // non-boolean flags only

可以使用一个或两个减号; 它们是等效的. 布尔标志不允许使用最后一种形式,因为命令的含义

cmd -x *

其中*是Unix shell通配符,如果有一个名为0,false等的文件,则将更改.您必须使用-flag = false形式来关闭布尔标志.

标志解析在第一个非标志参数("-"是非标志参数)之前或终止符"-"之后停止.

整数标志接受1234、0664、0x1234,并且可以为负. 布尔标志可以是:

1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False

持续时间标志接受任何对time.ParseDuration有效的输入.

命令行标志的默认集合由顶级功能控制. FlagSet类型允许人们定义独立的标志集,例如在命令行界面中实现子命令. FlagSet的方法类似于命令行标志集的顶级功能.

Example

Index ▾

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
type Flag
    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) ErrorHandling() ErrorHandling
    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) Name() string
    func (f *FlagSet) Output() io.Writer
    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

Examples

Package
Value

Package files

flag.go

Variables

CommandLine是从os.Args解析的默认命令行标志集. BoolVar,Arg等顶级功能是CommandLine方法的包装.

var CommandLine = NewFlagSet(os.Args[0], ExitOnError)

如果调用-help或-h标志但未定义该标志,则返回ErrHelp错误.

var ErrHelp = errors.New("flag: help requested")

Usage prints a usage message documenting all defined command-line flags to CommandLine's output, which by default is os.Stderr. It is called when an error occurs while parsing flags. The function is a variable that may be changed to point to a custom function. By default it prints a simple header and calls PrintDefaults; for details about the format of the output and how to control it, see the documentation for PrintDefaults. Custom usage functions may choose to exit the program; by default exiting happens anyway as the command line's error handling strategy is set to ExitOnError.

var Usage = func() {
    fmt.Fprintf(CommandLine.Output(), "Usage of %s:\n", os.Args[0])
    PrintDefaults()
}

func Arg

func Arg(i int) string

Arg返回第i个命令行参数. Arg(0)是标志已处理后的第一个剩余参数. 如果请求的元素不存在,则Arg返回一个空字符串.

func Args

func Args() []string

Args返回非标志命令行参数.

func Bool

func Bool(name string, value bool, usage string) *bool

Bool使用指定的名称,默认值和用法字符串定义一个bool标志. 返回值是存储标记值的布尔变量的地址.

func BoolVar

func BoolVar(p *bool, name string, value bool, usage string)

BoolVar使用指定的名称,默认值和用法字符串定义一个bool标志. 参数p指向一个bool变量,用于存储该标志的值.

func Duration

func Duration(name string, value time.Duration, usage string) *time.Duration

持续时间定义了time.Duration标志,具有指定的名称,默认值和用法字符串. 返回值是存储标记值的time.Duration变量的地址. 该标志接受time.ParseDuration可接受的值.

func DurationVar

func DurationVar(p *time.Duration, name string, value time.Duration, usage string)

DurationVar使用指定的名称,默认值和用法字符串定义一个time.Duration标志. 参数p指向一个time.Duration变量,用于存储标志的值. 该标志接受time.ParseDuration可接受的值.

func Float64

func Float64(name string, value float64, usage string) *float64

Float64使用指定的名称,默认值和用法字符串定义一个float64标志. 返回值是float64变量的地址,该变量存储标志的值.

func Float64Var

func Float64Var(p *float64, name string, value float64, usage string)

Float64Var使用指定的名称,默认值和用法字符串定义一个float64标志. 参数p指向一个float64变量,用于存储该标志的值.

func Int

func Int(name string, value int, usage string) *int

Int使用指定的名称,默认值和用法字符串定义一个int标志. 返回值是存储该标志值的int变量的地址.

func Int64

func Int64(name string, value int64, usage string) *int64

Int64使用指定的名称,默认值和用法字符串定义一个int64标志. 返回值是存储该标志值的int64变量的地址.

func Int64Var

func Int64Var(p *int64, name string, value int64, usage string)

Int64Var使用指定的名称,默认值和用法字符串定义一个int64标志. 参数p指向一个int64变量,用于在其中存储标志的值.

func IntVar

func IntVar(p *int, name string, value int, usage string)

IntVar用指定的名称,默认值和用法字符串定义一个int标志. 参数p指向一个int变量,用于存储标志的值.

func NArg

func NArg() int

NArg是在处理标志后剩余的参数个数.

func NFlag

func NFlag() int

NFlag返回已设置的命令行标志的数量.

func Parse

func Parse()

Parse parses the command-line flags from os.Args[1:]. Must be called after all flags are defined and before flags are accessed by the program.

func Parsed

func Parsed() bool

解析报告报告是否已解析命令行标志.

func PrintDefaults

func PrintDefaults()

除非另行配置,否则PrintDefaults会显示一条使用情况消息,以显示所有已定义的命令行标志的默认设置,直至出现标准错误,直到出现标准错误. 对于整数标志x,默认输出的形式为

-x int
	usage-message-for-x (default 7)

用法消息将在单独的行上显示,但带有一个字节名称的布尔标志除外. 对于布尔标志,将省略类型,并且如果标志名称为一个字节,则用法消息将显示在同一行上. 如果类型的默认值为零,则省略括号的默认值. 可以通过在标志的用法字符串中加上反引号来更改列出的类型(此处为int). 消息中的第一个此类项目被视为要在消息中显示的参数名称,并且在显示时从消息中删除反引号. 例如,给定

flag.String("I", "", "search `directory` for include files")

输出将是

-I directory
	search directory for include files.

若要更改标志消息的目标,请调用CommandLine.SetOutput.

func Set

func Set(name, value string) error

Set设置命名命令行标志的值.

func String

func String(name string, value string, usage string) *string

字符串定义具有指定名称,默认值和用法字符串的字符串标志. 返回值是存储变量值的字符串变量的地址.

func StringVar

func StringVar(p *string, name string, value string, usage string)

StringVar定义具有指定名称,默认值和用法字符串的字符串标志. 参数p指向一个字符串变量,用于在其中存储标志的值.

func Uint

func Uint(name string, value uint, usage string) *uint

Uint定义具有指定名称,默认值和用法字符串的uint标志. 返回值是存储标志值的uint变量的地址.

func Uint64

func Uint64(name string, value uint64, usage string) *uint64

Uint64定义具有指定名称,默认值和用法字符串的uint64标志. 返回值是存储标志值的uint64变量的地址.

func Uint64Var

func Uint64Var(p *uint64, name string, value uint64, usage string)

Uint64Var使用指定的名称,默认值和用法字符串定义uint64标志. 参数p指向uint64变量,该变量用于存储标志的值.

func UintVar

func UintVar(p *uint, name string, value uint, usage string)

UintVar定义具有指定名称,默认值和用法字符串的uint标志. 参数p指向用于存储标志值的uint变量.

func UnquoteUsage 1.5

func UnquoteUsage(flag *Flag) (name string, usage string)

UnquoteUsage从用法字符串中为标志提取一个反引号,并返回它和未引用的用法. 给定"要显示的名称",它会返回("名称","要显示的名称"). 如果没有反引号,则名称是对标记值类型的有根据的猜测,如果标记为布尔值,则为空字符串.

func Var

func Var(value Value, name string, usage string)

Var使用指定的名称和用法字符串定义一个标志. 标志的类型和值由Value类型的第一个参数表示,该参数通常保存Value的用户定义实现. 例如,调用者可以创建一个标志,该标志可以通过给分片指定Value方法来将逗号分隔的字符串转换为分片. 特别地,Set会将逗号分隔的字符串分解为切片.

func Visit

func Visit(fn func(*Flag))

Visit按字典顺序访问命令行标志,并为每个标志调用fn. 它仅访问已设置的那些标志.

func VisitAll

func VisitAll(fn func(*Flag))

VisitAll按字典顺序访问命令行标志,并为每个标志调用fn. 它访问所有标志,甚至没有设置的标志.

type ErrorHandling

ErrorHandling定义在解析失败时FlagSet.Parse的行为.

type ErrorHandling int

如果解析失败,则这些常量使FlagSet.Parse表现为所描述的.

const (
    ContinueOnError ErrorHandling = iota // Return a descriptive error.
    ExitOnError                          // Call os.Exit(2).
    PanicOnError                         // Call panic with a descriptive error.
)

type Flag

标志表示标志的状态.

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

func Lookup(name string) *Flag

查找将返回命名命令行标志的Flag结构,如果不存在则返回nil.

type FlagSet

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. What happens after Usage is called depends
    // on the ErrorHandling setting; for the command line, this defaults
    // to ExitOnError, which exits the program after calling Usage.
    Usage func()
    // contains filtered or unexported fields
}

func NewFlagSet

func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet

NewFlagSet返回带有指定名称和错误处理属性的新的空标志集. 如果名称不为空,则会在默认用法消息和错误消息中打印出来.

func (*FlagSet) Arg

func (f *FlagSet) Arg(i int) string

Arg返回第i个参数. Arg(0)是标志已处理后的第一个剩余参数. 如果请求的元素不存在,则Arg返回一个空字符串.

func (*FlagSet) Args

func (f *FlagSet) Args() []string

Args返回非标志参数.

func (*FlagSet) Bool

func (f *FlagSet) Bool(name string, value bool, usage string) *bool

Bool使用指定的名称,默认值和用法字符串定义一个bool标志. 返回值是存储标记值的布尔变量的地址.

func (*FlagSet) BoolVar

func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)

BoolVar使用指定的名称,默认值和用法字符串定义一个bool标志. 参数p指向一个bool变量,用于存储该标志的值.

func (*FlagSet) Duration

func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration

持续时间定义了time.Duration标志,具有指定的名称,默认值和用法字符串. 返回值是存储标记值的time.Duration变量的地址. 该标志接受time.ParseDuration可接受的值.

func (*FlagSet) DurationVar

func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)

DurationVar使用指定的名称,默认值和用法字符串定义一个time.Duration标志. 参数p指向一个time.Duration变量,用于存储标志的值. 该标志接受time.ParseDuration可接受的值.

func (*FlagSet) ErrorHandling 1.10

func (f *FlagSet) ErrorHandling() ErrorHandling

ErrorHandling返回标志集的错误处理行为.

func (*FlagSet) Float64

func (f *FlagSet) Float64(name string, value float64, usage string) *float64

Float64使用指定的名称,默认值和用法字符串定义一个float64标志. 返回值是float64变量的地址,该变量存储标志的值.

func (*FlagSet) Float64Var

func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string)

Float64Var使用指定的名称,默认值和用法字符串定义一个float64标志. 参数p指向一个float64变量,用于存储该标志的值.

func (*FlagSet) Init

func (f *FlagSet) Init(name string, errorHandling ErrorHandling)

初始化为标志集设置名称和错误处理属性. 默认情况下,零FlagSet使用一个空名称和ContinueOnError错误处理策略.

func (*FlagSet) Int

func (f *FlagSet) Int(name string, value int, usage string) *int

Int使用指定的名称,默认值和用法字符串定义一个int标志. 返回值是存储该标志值的int变量的地址.

func (*FlagSet) Int64

func (f *FlagSet) Int64(name string, value int64, usage string) *int64

Int64使用指定的名称,默认值和用法字符串定义一个int64标志. 返回值是存储该标志值的int64变量的地址.

func (*FlagSet) Int64Var

func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string)

Int64Var使用指定的名称,默认值和用法字符串定义一个int64标志. 参数p指向一个int64变量,用于在其中存储标志的值.

func (*FlagSet) IntVar

func (f *FlagSet) IntVar(p *int, name string, value int, usage string)

IntVar用指定的名称,默认值和用法字符串定义一个int标志. 参数p指向一个int变量,用于存储标志的值.

func (*FlagSet) Lookup

func (f *FlagSet) Lookup(name string) *Flag

查找返回命名标志的Flag结构,如果不存在则返回nil.

func (*FlagSet) NArg

func (f *FlagSet) NArg() int

NArg是在处理标志后剩余的参数个数.

func (*FlagSet) NFlag

func (f *FlagSet) NFlag() int

NFlag返回已设置的标志数.

func (*FlagSet) Name 1.10

func (f *FlagSet) Name() string

Name返回标志集的名称.

func (*FlagSet) Output 1.10

func (f *FlagSet) Output() io.Writer

输出返回使用和错误消息的目标. 如果未设置输出或将其设置为nil,则返回os.Stderr.

func (*FlagSet) Parse

func (f *FlagSet) Parse(arguments []string) error

解析从参数列表中解析标志定义,该定义不应包含命令名称. 必须在定义了FlagSet中的所有标志之后并且在程序访问标志之前必须调用它. 如果设置了-help或-h,但未定义,则返回值为ErrHelp.

func (*FlagSet) Parsed

func (f *FlagSet) Parsed() bool

解析后报告是否调用了f.Parse.

func (*FlagSet) PrintDefaults

func (f *FlagSet) PrintDefaults()

除非另行配置,否则PrintDefaults会以标准错误的方式打印该集中所有已定义命令行标志的默认值. 有关更多信息,请参见全局函数PrintDefaults的文档.

func (*FlagSet) Set

func (f *FlagSet) Set(name, value string) error

Set设置命名标志的值.

func (*FlagSet) SetOutput

func (f *FlagSet) SetOutput(output io.Writer)

SetOutput设置用法和错误消息的目标. 如果输出为nil,则使用os.Stderr.

func (*FlagSet) String

func (f *FlagSet) String(name string, value string, usage string) *string

字符串定义具有指定名称,默认值和用法字符串的字符串标志. 返回值是存储变量值的字符串变量的地址.

func (*FlagSet) StringVar

func (f *FlagSet) StringVar(p *string, name string, value string, usage string)

StringVar定义具有指定名称,默认值和用法字符串的字符串标志. 参数p指向一个字符串变量,用于在其中存储标志的值.

func (*FlagSet) Uint

func (f *FlagSet) Uint(name string, value uint, usage string) *uint

Uint定义具有指定名称,默认值和用法字符串的uint标志. 返回值是存储标志值的uint变量的地址.

func (*FlagSet) Uint64

func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64

Uint64定义具有指定名称,默认值和用法字符串的uint64标志. 返回值是存储标志值的uint64变量的地址.

func (*FlagSet) Uint64Var

func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string)

Uint64Var使用指定的名称,默认值和用法字符串定义uint64标志. 参数p指向uint64变量,该变量用于存储标志的值.

func (*FlagSet) UintVar

func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string)

UintVar定义具有指定名称,默认值和用法字符串的uint标志. 参数p指向用于存储标志值的uint变量.

func (*FlagSet) Var

func (f *FlagSet) Var(value Value, name string, usage string)

Var使用指定的名称和用法字符串定义一个标志. 标志的类型和值由Value类型的第一个参数表示,该参数通常保存Value的用户定义实现. 例如,调用者可以创建一个标志,该标志可以通过给分片指定Value方法来将逗号分隔的字符串转换为分片. 特别地,Set会将逗号分隔的字符串分解为切片.

func (*FlagSet) Visit

func (f *FlagSet) Visit(fn func(*Flag))

Visit按字典顺序访问标志,每个标志分别调用fn. 它仅访问已设置的那些标志.

func (*FlagSet) VisitAll

func (f *FlagSet) VisitAll(fn func(*Flag))

VisitAll按字典顺序访问标志,每个标志都调用fn. 它访问所有标志,甚至没有设置的标志.

type Getter 1.2

Getter是一个接口,允许检索Value的内容. 它包装了Value接口,而不是它的一部分,因为它出现在Go 1及其兼容性规则之后. 此包提供的所有值类型都满足Getter接口.

type Getter interface {
    Value
    Get() interface{}
}

type Value

值是存储在标志中的动态值的接口. (默认值表示为字符串.)

如果Value的IsBoolFlag()bool方法返回true,则命令行解析器将-name等效于-name = true,而不使用下一个命令行参数.

Set is called once, in command line order, for each flag present. The flag package may call the String method with a zero-valued receiver, such as a nil pointer.

type Value interface {
    String() string
    Set(string) error
}

Example

{scheme: "https", host: "golang.org", path: "/pkg/flag/"}

by  ICOPY.SITE