Contents

go标准库-Flag

go语言中文网

godoc

go语言中文网有很多文档缺少内容比如string.Builder就没有,godoc绝对详尽,推荐阅读godoc

常见用法

定义flag变量

  1. 直接声明flag变量
1
2
import "flag"
var nFlag = flag.Int("n", 1234, "help message for flag n")
  1. 先声明普通变量再关联到flag变量
1
2
3
4
var flagvar int
func init() {
	flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}

加载flag

1
flag.Parse()

变量

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

常量

1
2
3
4
5
6
7
8
9
//调用Parse出错的反应
const (
    //不退出,返回错误描述
    ContinueOnError ErrorHandling = iota
    //调用os.Exit(2)
    ExitOnError
    //panic抛出错误
    PanicOnError
)

函数

  • func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet:新建一个flagset,errorHandling表示在parse时出错的反应:

type FlagSet struct

1
2
3
4
5
6
type FlagSet struct {
    // Usage函数在解析flag出现错误时会被调用
    // 该字段为一个函数(而非采用方法),以便修改为自定义的错误处理函数
    Usage func()
    // 内含隐藏或非导出字段
}

FlagSet代表一个已注册的flag的集合,默认采用ContinueOnError

方法

  • func (f *FlagSet) Init(name string, errorHandling ErrorHandling):设置名字和错误处理

type Value interface

1
2
3
4
type Value interface {
    String() string
    Set(string) error
}

flag默认单例和flagset都有的函数或方法

  • func (f *FlagSet) NFlag() int:flag的数量
  • func (f *FlagSet) Arg(i int) string:返回剩下的第i个参数,从0开始
  • func (f *FlagSet) Lookup(name string) *Flag:返回已经f中已注册flag的Flag结构体指针;如果flag不存在的话,返回nil
  • func (f *FlagSet) NArg() int:NArg返回解析flag之后非flag参数的个数
  • func (f *FlagSet) Args() []string:返回解析之后剩下的非flag参数,与NArg一致,不过这里是返回值,NArg返回个数
  • func (f *FlagSet) Set(name, value string) error:设置已注册的flag的值
  • func (f *FlagSet) Parse(arguments []string) error:从arguments中解析注册的flag

  • 类型():func Bool(name string, value bool, usage string) *bool,返回一个指针
  • 类型Var():func BoolVar(p *bool, name string, value bool, usage string)

可用的类型有:Bool,Int,Int64,Uint,Uint64,Float64,String,Duration

特殊类型有Var:func Var(value Value, name string, usage string),会调用Value接口的Set方法来解析出Var的值

 |