Documentation ¶
Index ¶
- Variables
- func Help()
- func ParseStruct(val interface{}, args ...string) error
- type ErrorHandling
- type Flag
- type FlagSet
- func (f *FlagSet) ErrHandling(ehs ...ErrorHandling) *FlagSet
- func (f *FlagSet) FindFlag(children string) (*Flag, error)
- func (f *FlagSet) FindSubset(children string) (*FlagSet, error)
- func (f *FlagSet) Flag(flag Flag) error
- func (f *FlagSet) Help()
- func (f *FlagSet) NeedHelpFlag(need bool) *FlagSet
- func (f *FlagSet) Parse(args ...string) error
- func (f *FlagSet) ParseStruct(val interface{}, args ...string) error
- func (f *FlagSet) Reset()
- func (f *FlagSet) String() string
- func (f *FlagSet) StructFlags(val interface{}, parent ...*FlagSet) error
- func (f *FlagSet) Subset(flag Flag) (*FlagSet, error)
- func (f *FlagSet) UpdateMeta(children string, meta Flag) error
- type Metadata
- type NoFlag
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // Commandline is the default FlagSet instance. Commandline = NewFlagSet(Flag{}) )
Functions ¶
func ParseStruct ¶
ParseStruct is short way of Commandline.ParseStruct
Types ¶
type ErrorHandling ¶
type ErrorHandling uint8
ErrorHandling is the error handling way when error occurred when register/scan/resolve.
ErrorHandling can be set of basic handling way, the way sequence is ErrPanic, ErrPrint, ErrExit.
const ( // ErrPanic panic goroutine with the error ErrPanic ErrorHandling = 1 << iota // ErrPrint print the error to stdout ErrPrint // ErrExit exit process ErrExit // DefaultErrorHandling includes ErrPrint and ErrExit DefaultErrorHandling = ErrPrint | ErrExit )
type Flag ¶
type Flag struct { // Common fields used for Flag and FlagSet Names string // names, split by ',' Arglist string // arguments list Usage string // short usage message Desc string // long description, can be multiple lines Ptr interface{} // value pointer // For Flag Default interface{} // default value Selects interface{} // select value Env string // environment name ValSep string // environment value separator // For FlagSet Version string // version, can be multiple lines ArgsPtr *[]string // non-flag arguments pointer ArgsAnywhere bool // non-flag args must appears at anywhere, otherwise, it must appears at command line last. // contains filtered or unexported fields }
Flag represents the state of a flag
type FlagSet ¶
type FlagSet struct {
// contains filtered or unexported fields
}
FlagSet is a set of flags and other subsets.
func (*FlagSet) ErrHandling ¶
func (f *FlagSet) ErrHandling(ehs ...ErrorHandling) *FlagSet
ErrHandling change the way of error handling
func (*FlagSet) FindFlag ¶
FindFlag search flag by the children identifier, children is set subset/flag names split by ','.
func (*FlagSet) FindSubset ¶
FindSubset search flagset by the children identifier, children is subset names split by ','.
func (*FlagSet) Flag ¶
Flag add a flag to current flagset, it should not duplicate with parent/current/children levels' flag or flagset.
func (*FlagSet) NeedHelpFlag ¶
NeedHelpFlag toggle help flags auto-defining. By default, if there is no help flag, it will be defined when Parse is called.
func (*FlagSet) ParseStruct ¶
ParseStruct is the combination of StructFlags and Parse
Example ¶
package main import "fmt" type Tar struct { GZ bool `names:"-z, --gz" usage:"gzip format"` BZ bool `names:"-j, --bz" usage:"bzip2 format"` XZ bool `names:"-J, --xz" usage:"xz format"` Create bool `names:"-c" usage:"create tar file"` Extract bool `names:"-x" usage:"extract tar file"` File string `names:"-f" usage:"output file for create or input file for extract"` Directory string `names:"-C" usage:"extract directory"` SourceFiles []string `args:"true"` } func (t *Tar) Metadata() map[string]Flag { const ( usage = "tar is a tool for manipulate tape archives." version = ` version: v1.0.0 commit: 10adf10dc10 date: 2017-01-01 10:00:01 ` desc = ` tar creates and manipulates streaming archive files. This implementation can extract from tar, pax, cpio, zip, jar, ar, and ISO 9660 cdrom images and can create tar, pax, cpio, ar, and shar archives. ` ) return map[string]Flag{ "": { Usage: usage, Version: version, Desc: desc, }, "--gz": { Desc: "use gzip format", }, } } func main() { var tar Tar NewFlagSet(Flag{}).ParseStruct(&tar, "tar", "-zcf", "a.tgz", "a.go", "b.go") fmt.Println(tar.GZ) fmt.Println(tar.Create) fmt.Println(tar.File) fmt.Println(tar.SourceFiles) } type GoCmd struct { Build struct { Enable bool Already bool `names:"-a" important:"1" desc:"force rebuilding of packages that are already up-to-date."` Race bool `important:"1" desc:"enable data race detection.\nSupported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64."` Output string `names:"-o" arglist:"output" important:"1" desc:"only allowed when compiling a single package"` LdFlags string `names:"-ldflags" arglist:"'flag list'" desc:"rguments to pass on each go tool link invocation."` Packages []string `args:"true"` } `usage:"compile packages and dependencies"` Clean struct { Enable bool } `usage:"remove object files"` Doc struct { Enable bool } `usage:"show documentation for package or symbol"` Env struct { Enable bool } `usage:"print Go environment information"` Bug struct { Enable bool } `usage:"start a bug report"` Fix struct { Enable bool } `usage:"run go tool fix on packages"` Fmt struct { Enable bool } `usage:"run gofmt on package sources"` } func (*GoCmd) Metadata() map[string]Flag { return map[string]Flag{ "": { Usage: "Go is a tool for managing Go source code.", Arglist: "command [argument]", }, "build": { Arglist: "[-o output] [-i] [build flags] [packages]", Desc: ` Build compiles the packages named by the import paths, along with their dependencies, but it does not install the results. ... The build flags are shared by the build, clean, get, install, list, run, and test commands: `, }, } }
Output: true true a.tgz [a.go b.go]
func (*FlagSet) StructFlags ¶
StructFlags parse the structure pointer and add exported fields to flagset. if parent is not nil, it will checking duplicate flags with parent.
func (*FlagSet) UpdateMeta ¶
UpdateMeta update flag metadata by the children identifier, only Desc, Arglist, Usage and Version will be updated. The children identifier will be split by ',', if children is empty, it update itself.
E.g., "tool, cover, -html": Flag{Usage:"display coverage in html"}