flag命令行解析
flag用于解析命令行参数
语法
-flag //只支持bool -flag=x //都支持 -flag x //支持非bool
bool类型可以为:1,0,t,f,T,F,true,false,True,False,TRUE,FALSE
flag定义参数
- flag.String()等flag.Xxx()方法,flag该方式返回一个指针
- flag.XxxVar()方法将flag参数绑定到一个变量
- flag.Var()方法绑定自定义类型,自定义类型需要实现Value()接口
flag.Parse()
解析命令行参数到定义的flag
获取非flag参数
flag.Args() flag.Arg(i)
绑定自定义的flag参数
绑定自定义的flag参数需要实现标准库里的Value接口。
// Value is the interface to the dynamic value stored in a flag.
// (The default value is represented as a string.)
//
// If a Value has an IsBoolFlag() bool method returning true,
// the command-line parser makes -name equivalent to -name=true
// rather than using the next command-line argument.
//
// 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
}
// Getter is an interface that allows the contents of a Value to be retrieved.
// It wraps the Value interface, rather than being part of it, because it
// appeared after Go 1 and its compatibility rules. All Value types provided
// by this package satisfy the Getter interface.
type Getter interface {
Value
Get() interface{}
}
示例
package main
import (
"flag"
"fmt"
)
type human struct {
Name string
}
func (h *human) String() string {
return h.Name
}
func (h *human) Set(val string) error {
h.Name = val
return nil
}
var people human
func main() {
flag.Var(&people, "h", "xxxxxxxxxxxxxxxxx")
flag.Parse()
fmt.Println(people)
}
// output
// $ go run main.go -h pytimer
// {pytimer}