Flag 包实现命令行标志解析。
定义了 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()
将命令行解析为定义的标志。
package main
import (
"flag"
"fmt"
"net/url"
)
type URLValue struct {
URL *url.URL
}
func (v URLValue) String() string {
if v.URL != nil {
return v.URL.String()
}
return ""
}
func (v URLValue) Set(s string) error {
if u, err := url.Parse(s); err != nil {
return err
} else {
*v.URL = *u
}
return nil
}
var u = &url.URL{}
func main() {
fs := flag.NewFlagSet("ExampleValue", flag.ExitOnError)
fs.Var(&URLValue{u}, "url", "URL to parse")
fs.Parse([]string{"-url", "https://golang.org/pkg/flag/"})
fmt.Printf(`{scheme: %q, host: %q, path: %q}`, u.Scheme, u.Host, u.Path)
}