非常教程

Go参考手册

flag

flag(命令行参数解析flag包)

  • import "flag"
  • 概述
  • 索引
  • 示例

概述

Flag 包实现了命令行标志解析。

用法:

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

这声明了一个整型 flag,-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 索引。

命令行标志语法:

-flag
-flag=x
-flag x  // 仅限非布尔标志

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

cmd -x *

如果有一个名为 0,false 等的文件,它将会改变。你必须使用 -flag = false 来关闭布尔标志。

标志解析在第一个非标志参数(“ - ”是非标志参数)之前停止,或者在终止符“ - ”之后停止。

整数标志接受 1234,0664,0x1234 并且可能是负数。布尔标志可能是:

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

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

默认的一组命令行标志由顶层函数控制。FlagSet 类型允许您定义独立的标志集,例如在命令行界面中实现子命令。FlagSet 的方法类似于命令行标志集的顶层函数。

示例

// 这些示例演示了对标志包的更复杂的使用。
package main

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

// 示例1:名为“species”的单个字符串标志,默认值为“gopher”。
var species = flag.String("species", "gopher", "the species we are studying")

// 示例2:共享变量的两个标志,因此我们可以使用速记。
// 初始化的顺序是未定义的,因此请确保两者都使用
// 相同的默认值。 必须使用init函数设置它们。
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:用户定义的标志类型,持续时间片。
type interval []time.Duration

// String是格式化标志值的方法,是flag.Value接口的一部分。
// String方法的输出将用于诊断。
func (i *interval) String() string {
	return fmt.Sprint(*i)
}

// Set是设置标志值的方法,flag.Value接口的一部分。
// Set的参数是要解析以设置标志的字符串。
// 这是一个以逗号分隔的列表,因此我们将其拆分。
func (i *interval) Set(value string) error {
	// 如果我们想允许多次设置标志,
	// 累积值,我们将删除此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
}

// 定义一个标志来累积持续时间。 因为它有特殊的类型,
// 我们需要使用Var函数,因此在期间创建标志
// init。

var intervalFlag interval

func init() {
	// 将命令行标志绑定到intervalFlag变量和
	// 设置用法消息。
	flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")
}

func main() {
	// 所有有趣的部分都是上面声明的变量,但是
	// 要使标志包能够看到那里定义的标志,就必须这样做
	// 执行,通常在main(不是init!)的开头执行:
	//	flag.Parse()
	// 我们不在这里运行它,因为这不是主要功能
	//测试套件已经解析了标志。
}

索引

  • 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 解析的默认命令行标志集。顶级函数(如 BoolVar,Arg 等)是 CommandLine方法的包装器。

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

如果调用了 -help 或 -h 标志但没有定义这样的标志,ErrHelp 是返回的错误。

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

用法向标准错误输出记录所有定义的命令行标志的用法消息。它在解析标志时发生错误时被调用。该函数是一个可以更改为指向自定义函数的变量。默认情况下,它打印一个简单的标题并调用 PrintDefaults ; 有关输出格式以及如何控制它的详细信息,请参阅 PrintDefaults 的文档。

var Usage = func() {
        fmt.Fprintf(os.Stderr, "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 定义了一个具有指定名称,默认值和用法字符串的布尔标志。参数 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()

解析解析 os.Args1: 中的命令行标志。必须在定义了所有标志之后并且在程序访问标志之前调用。

func Parsed(显示源代码)

func Parsed() bool

Parsed 报告命令行标志是否已被解析。

func PrintDefaults(显示源代码)

func PrintDefaults()

除非另行配置,否则 PrintDefaults 会打印标准错误,显示所有已定义的命令行标志的默认设置。对于整数值标志 x,默认输出具有该形式

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

除了带有单字节名称的布尔标志之外,用法消息将显示在单独的行上。对于 bool 标志,类型被省略,并且如果标志名称是一个字节,则使用消息出现在同一行上。如果默认值是类型的零值,则省略括号默认值。列出的类型(这里是 int)可以通过在标志的使用字符串中放置一个反引号的名称来更改; 消息中的第一个这样的项目被视为在消息中显示的参数名称,并且在显示时从消息中除去后面的引号。例如,给出

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

输出将是

-I directory
	search directory for include files.

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(显示源代码)

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

UnquoteUsage 从标志的用法字符串中提取一个反引号的名称,并返回它和未加引号的用法。给定“ name显示”它返回(“name”,“a name to show”)。如果没有后引号,则该名称是对标志值类型的合理猜测,如果标志为布尔值,则为空字符串。

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 // 返回描述性错误。
        ExitOnError                          // 调用 os.Exit(2)。
        PanicOnError                         // 用描述性错误调用panic。
)

type Flag(显示源代码)

一个标志(Flag)表示一个标志的状态。

type Flag struct {
        Name     string // 命令行上显示的名称
        Usage    string // 帮助信息
        Value    Value  // 设定值
        DefValue string // 默认值(作为文本); 用法信息

func Lookup(显示源代码)

func Lookup(name string) *Flag

Lookup 返回指定命令行标志的标志结构,如果不存在则返回 nil 。

type FlagSet(显示源代码)

FlagSet 表示一组定义的标志。FlagSet 的零值没有名称,并且具有 ContinueOnError 错误处理。

type FlagSet struct {
        // 用法是解析标志时发生错误时调用的函数。
        // 该字段是可以更改为指向的函数(不是方法)
        // 自定义错误处理程序。
        Usage func()
        // 包含已过滤或未导出的字段
}

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 定义了一个具有指定名称,默认值和用法字符串的布尔标志。参数 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) 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)

Init 为标志集设置名称和错误处理属性。默认情况下,zero 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

Lookup 返回指定标志的标志结构,如果不存在则返回 nil 。

func (*FlagSet) NArg(显示源代码)

func (f *FlagSet) NArg() int

NArg 是标志处理后剩余的参数数量。

func (*FlagSet) NFlag(显示源代码)

func (f *FlagSet) NFlag() int

NFlag 返回已设置的标志数量。

func (*FlagSet) Parse(显示源代码)

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

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

func (*FlagSet) Parsed(显示源代码)

func (f *FlagSet) Parsed() bool

Parsed 报告是否调用了 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 设置使用和错误消息的目的地。如果输出为零,则使用 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(显示源代码)

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

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

type Value(显示源代码)

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

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

对于每个存在的标志,集合都以命令行顺序调用一次。标志包可以用一个零值接收者(例如零指针)调用 String 方法。

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

flag相关

Go

Go 是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

主页 https://golang.org/
源码 https://go.googlesource.com/go
发布版本 1.9.2

Go目录

1.档案 | archive
2.缓冲区 | bufio
3.内置 | builtin
4.字节 | bytes
5.压缩 | compress
6.容器 | container
7.上下文 | context
8.加密 | crypto
9.数据库 | database
10.调试 | debug
11.编码 | encoding
12.错误 | errors
13. expvar
14.flag
15. fmt
16. go
17.散列 | hash
18.html
19.图像 | image
20.索引 | index
21.io
22.日志 | log
23.数学 | math
24. math/big
25.math/bits
26.math/cmplx
27.math/rand
28.拟态 | mime
29.net
30.net/http
31. net/mail
32. net/rpc
33.net/smtp
34. net/textproto
35. net/url
36.os
37.路径 | path
38.插件 | plugin
39.反射 | reflect
40.正则表达式 | regexp
41.运行时 | runtime
42.排序算法 | sort
43.转换 | strconv
44.字符串 | strings
45.同步 | sync
46.系统调用 | syscall
47.测试 | testing
48.文本 | text
49.时间戳 | time
50.unicode
51.不安全性 | unsafe
52.Go 语言数据类型
53.Go 语言基础语法
54.Go 语言结构
55.Go 语言 select 语句
56.Go 语言 switch 语句
57.Go 语言 if 语句嵌套
58.Go 语言 if…else 语句
59.Go 语言 if 语句
60.Go 语言运算符
61.Go 语言常量
62.Go 语言函数闭包
63.Go 语言函数作为实参
64.Go 语言函数引用传递值
65.Go 语言函数值传递值
66.Go 语言函数
67.Go 语言 goto 语句
68.Go 语言 continue 语句
69.Go 语言 break 语句
70.Go 语言循环嵌套
71.Go 语言 for 循环
72.Go 语言结构体
73.Go 语言指针作为函数参数
74.Go 语言指向指针的指针
75.Go 语言指针数组
76.Go 语言指针
77.Go 语言向函数传递数组
78.Go 语言多维数组
79.Go 语言变量作用域
80.Go 语言函数方法
81.Go 错误处理
82.Go 语言接口
83.Go 语言类型转换
84.Go 语言递归函数
85.Go 语言Map(集合)
86.Go 语言范围(Range)
87.Go 语言切片(Slice)
88.Go 并发
89.Go fmt.Sprintf 格式化字符串