Documentation ¶
Overview ¶
Package kingpin provides command line interfaces like this:
$ chat usage: chat [<flags>] <command> [<flags>] [<args> ...] Flags: --debug enable debug mode --help Show help. --server=127.0.0.1 server address Commands: help <command> Show help for a command. post [<flags>] <channel> Post a message to a channel. register <nick> <name> Register a new user. $ chat help post usage: chat [<flags>] post [<flags>] <channel> [<text>] Post a message to a channel. Flags: --image=IMAGE image to post Args: <channel> channel to post to [<text>] text to post $ chat post --image=~/Downloads/owls.jpg pics
From code like this:
package main import "github.com/alecthomas/kingpin" var ( debug = kingpin.Flag("debug", "enable debug mode").Default("false").Bool() serverIP = kingpin.Flag("server", "server address").Default("127.0.0.1").IP() register = kingpin.Command("register", "Register a new user.") registerNick = register.Arg("nick", "nickname for user").Required().String() registerName = register.Arg("name", "name of user").Required().String() post = kingpin.Command("post", "Post a message to a channel.") postImage = post.Flag("image", "image to post").File() postChannel = post.Arg("channel", "channel to post to").Required().String() postText = post.Arg("text", "text to post").String() ) func main() { switch kingpin.Parse() { // Register user case "register": println(*registerNick) // Post message case "post": if *postImage != nil { } if *postText != "" { } } }
Index ¶
- Constants
- Variables
- func FatalIfError(err error, prefix string)
- func Fatalf(format string, args ...interface{})
- func MustParse(command string, err error) string
- func Parse() string
- func Tokenize(args []string) (tokens tokens)
- func Usage()
- func UsageErrorf(format string, args ...interface{})
- type Application
- func (a Application) Arg(name, help string) *ArgClause
- func (c *Application) Command(name, help string) *CmdClause
- func (c *Application) CommandUsage(w io.Writer, command string)
- func (f Application) Flag(name, help string) *FlagClause
- func (c *Application) Parse(args []string) (command string, err error)
- func (c *Application) Usage(w io.Writer)
- type ArgClause
- func (p *ArgClause) Bool() (target *bool)
- func (p *ArgClause) BoolVar(target *bool)
- func (a *ArgClause) Default(value string) *ArgClause
- func (a *ArgClause) Dispatch(dispatch Dispatch) *ArgClause
- func (p *ArgClause) Duration() (target *time.Duration)
- func (p *ArgClause) DurationVar(target *time.Duration)
- func (p *ArgClause) ExistingDir() (target *string)
- func (p *ArgClause) ExistingDirVar(target *string)
- func (p *ArgClause) ExistingFile() (target *string)
- func (p *ArgClause) ExistingFileVar(target *string)
- func (p *ArgClause) File() (target **os.File)
- func (p *ArgClause) FileVar(target **os.File)
- func (p *ArgClause) Float() (target *float64)
- func (p *ArgClause) FloatVar(target *float64)
- func (p *ArgClause) IP() (target *net.IP)
- func (p *ArgClause) IPVar(target *net.IP)
- func (p *ArgClause) Int() (target *int)
- func (p *ArgClause) Int64() (target *int64)
- func (p *ArgClause) Int64Var(target *int64)
- func (p *ArgClause) IntVar(target *int)
- func (a *ArgClause) Required() *ArgClause
- func (p *ArgClause) SetValue(value Value)
- func (p *ArgClause) String() (target *string)
- func (p *ArgClause) StringMap() (target *map[string]string)
- func (p *ArgClause) StringMapVar(target *map[string]string)
- func (p *ArgClause) StringVar(target *string)
- func (p *ArgClause) Strings() (target *[]string)
- func (p *ArgClause) StringsVar(target *[]string)
- func (p *ArgClause) TCP() (target **net.TCPAddr)
- func (p *ArgClause) TCPList() (target *[]*net.TCPAddr)
- func (p *ArgClause) TCPListVar(target *[]*net.TCPAddr)
- func (p *ArgClause) TCPVar(target **net.TCPAddr)
- func (p *ArgClause) URL() (target **url.URL)
- func (p *ArgClause) URLList() (target *[]*url.URL)
- func (p *ArgClause) URLListVar(target *[]*url.URL)
- func (p *ArgClause) URLVar(target **url.URL)
- func (p *ArgClause) Uint64() (target *uint64)
- func (p *ArgClause) Uint64Var(target *uint64)
- type CmdClause
- type Dispatch
- type FlagClause
- func (f *FlagClause) Bool() (target *bool)
- func (p *FlagClause) BoolVar(target *bool)
- func (f *FlagClause) Default(value string) *FlagClause
- func (f *FlagClause) Dispatch(dispatch Dispatch) *FlagClause
- func (p *FlagClause) Duration() (target *time.Duration)
- func (p *FlagClause) DurationVar(target *time.Duration)
- func (p *FlagClause) ExistingDir() (target *string)
- func (p *FlagClause) ExistingDirVar(target *string)
- func (p *FlagClause) ExistingFile() (target *string)
- func (p *FlagClause) ExistingFileVar(target *string)
- func (p *FlagClause) File() (target **os.File)
- func (p *FlagClause) FileVar(target **os.File)
- func (p *FlagClause) Float() (target *float64)
- func (p *FlagClause) FloatVar(target *float64)
- func (p *FlagClause) IP() (target *net.IP)
- func (p *FlagClause) IPVar(target *net.IP)
- func (p *FlagClause) Int() (target *int)
- func (p *FlagClause) Int64() (target *int64)
- func (p *FlagClause) Int64Var(target *int64)
- func (p *FlagClause) IntVar(target *int)
- func (f *FlagClause) PlaceHolder(placeholder string) *FlagClause
- func (f *FlagClause) Required() *FlagClause
- func (p *FlagClause) SetValue(value Value)
- func (f *FlagClause) Short(name byte) *FlagClause
- func (p *FlagClause) String() (target *string)
- func (p *FlagClause) StringMap() (target *map[string]string)
- func (p *FlagClause) StringMapVar(target *map[string]string)
- func (p *FlagClause) StringVar(target *string)
- func (p *FlagClause) Strings() (target *[]string)
- func (p *FlagClause) StringsVar(target *[]string)
- func (p *FlagClause) TCP() (target **net.TCPAddr)
- func (p *FlagClause) TCPList() (target *[]*net.TCPAddr)
- func (p *FlagClause) TCPListVar(target *[]*net.TCPAddr)
- func (p *FlagClause) TCPVar(target **net.TCPAddr)
- func (p *FlagClause) URL() (target **url.URL)
- func (p *FlagClause) URLList() (target *[]*url.URL)
- func (p *FlagClause) URLListVar(target *[]*url.URL)
- func (p *FlagClause) URLVar(target **url.URL)
- func (p *FlagClause) Uint64() (target *uint64)
- func (p *FlagClause) Uint64Var(target *uint64)
- type Getter
- type Settings
- type Value
Examples ¶
Constants ¶
const ( TokenShort tokenType = iota TokenLong TokenArg TokenEOF )
Token types.
Variables ¶
var ( // CommandLine is the default Kingpin parser. CommandLine = New(filepath.Base(os.Args[0]), "") )
var (
TokenEOFMarker = token{TokenEOF, ""}
)
Functions ¶
func FatalIfError ¶
FatalIfError prints an error and exits if err is not nil. The error is printed with the given prefix.
func Fatalf ¶
func Fatalf(format string, args ...interface{})
Fatalf prints an error message to stderr and exits.
func Parse ¶
func Parse() string
Parse and return the selected command. Will exit with a non-zero status if an error was encountered.
func UsageErrorf ¶
func UsageErrorf(format string, args ...interface{})
UsageErrorf prints an error message followed by usage information, then exits with a non-zero status.
Types ¶
type Application ¶
An Application contains the definitions of flags, arguments and commands for an application.
func (*Application) Command ¶
func (c *Application) Command(name, help string) *CmdClause
Command adds a new top-level command to the application.
func (*Application) CommandUsage ¶
func (c *Application) CommandUsage(w io.Writer, command string)
func (Application) Flag ¶
func (f Application) Flag(name, help string) *FlagClause
Flag defines a new flag with the given long name and help.
func (*Application) Parse ¶
func (c *Application) Parse(args []string) (command string, err error)
Parse parses command-line arguments.
func (*Application) Usage ¶
func (c *Application) Usage(w io.Writer)
type ArgClause ¶
type ArgClause struct {
// contains filtered or unexported fields
}
func (*ArgClause) Bool ¶
func (p *ArgClause) Bool() (target *bool)
Bool sets the parser to a boolean parser. Supports --no-<X> to disable the flag.
func (*ArgClause) BoolVar ¶
func (p *ArgClause) BoolVar(target *bool)
Bool sets the parser to a boolean parser. Supports --no-<X> to disable the flag.
func (*ArgClause) Default ¶
Default value for this argument. It *must* be parseable by the value of the argument.
func (*ArgClause) DurationVar ¶
Duration sets the parser to a time.Duration parser.
func (*ArgClause) ExistingDir ¶
func (p *ArgClause) ExistingDir() (target *string)
ExistingDir sets the parser to one that requires and returns an existing directory.
func (*ArgClause) ExistingDirVar ¶
func (p *ArgClause) ExistingDirVar(target *string)
ExistingDir sets the parser to one that requires and returns an existing directory.
func (*ArgClause) ExistingFile ¶
func (p *ArgClause) ExistingFile() (target *string)
ExistingFile sets the parser to one that requires and returns an existing file.
func (*ArgClause) ExistingFileVar ¶
func (p *ArgClause) ExistingFileVar(target *string)
ExistingFile sets the parser to one that requires and returns an existing file.
func (*ArgClause) Float ¶
func (p *ArgClause) Float() (target *float64)
Float sets the parser to a float64 parser.
func (*ArgClause) FloatVar ¶
func (p *ArgClause) FloatVar(target *float64)
Float sets the parser to a float64 parser.
func (*ArgClause) Int ¶
func (p *ArgClause) Int() (target *int)
Int sets the parser to an int parser.
func (*ArgClause) IntVar ¶
func (p *ArgClause) IntVar(target *int)
Int sets the parser to an int parser.
func (*ArgClause) Required ¶
Required arguments must be input by the user. They can not have a Default() value provided.
func (*ArgClause) String ¶
func (p *ArgClause) String() (target *string)
String sets the parser to a string parser.
func (*ArgClause) StringMapVar ¶
StringMap provides key=value parsing into a map.
func (*ArgClause) StringVar ¶
func (p *ArgClause) StringVar(target *string)
String sets the parser to a string parser.
func (*ArgClause) Strings ¶
func (p *ArgClause) Strings() (target *[]string)
Strings appends multiple occurrences to a string slice.
func (*ArgClause) StringsVar ¶
func (p *ArgClause) StringsVar(target *[]string)
Strings appends multiple occurrences to a string slice.
func (*ArgClause) TCPListVar ¶
TCPVar (host:port) address list.
func (*ArgClause) URLListVar ¶
URLListVar provides a parsed list of url.URL values.
type CmdClause ¶
type CmdClause struct {
// contains filtered or unexported fields
}
func (CmdClause) Flag ¶
func (f CmdClause) Flag(name, help string) *FlagClause
Flag defines a new flag with the given long name and help.
type FlagClause ¶
type FlagClause struct {
// contains filtered or unexported fields
}
FlagClause is a fluid interface used to build flags.
func (*FlagClause) Bool ¶
func (f *FlagClause) Bool() (target *bool)
Bool makes this flag a boolean flag.
func (*FlagClause) BoolVar ¶
func (p *FlagClause) BoolVar(target *bool)
Bool sets the parser to a boolean parser. Supports --no-<X> to disable the flag.
func (*FlagClause) Default ¶
func (f *FlagClause) Default(value string) *FlagClause
Default value for this flag. It *must* be parseable by the value of the flag.
func (*FlagClause) Dispatch ¶
func (f *FlagClause) Dispatch(dispatch Dispatch) *FlagClause
Dispatch to the given function when the flag is parsed.
func (*FlagClause) DurationVar ¶
Duration sets the parser to a time.Duration parser.
func (*FlagClause) ExistingDir ¶
func (p *FlagClause) ExistingDir() (target *string)
ExistingDir sets the parser to one that requires and returns an existing directory.
func (*FlagClause) ExistingDirVar ¶
func (p *FlagClause) ExistingDirVar(target *string)
ExistingDir sets the parser to one that requires and returns an existing directory.
func (*FlagClause) ExistingFile ¶
func (p *FlagClause) ExistingFile() (target *string)
ExistingFile sets the parser to one that requires and returns an existing file.
func (*FlagClause) ExistingFileVar ¶
func (p *FlagClause) ExistingFileVar(target *string)
ExistingFile sets the parser to one that requires and returns an existing file.
func (*FlagClause) Float ¶
func (p *FlagClause) Float() (target *float64)
Float sets the parser to a float64 parser.
func (*FlagClause) FloatVar ¶
func (p *FlagClause) FloatVar(target *float64)
Float sets the parser to a float64 parser.
func (*FlagClause) Int ¶
func (p *FlagClause) Int() (target *int)
Int sets the parser to an int parser.
func (*FlagClause) IntVar ¶
func (p *FlagClause) IntVar(target *int)
Int sets the parser to an int parser.
func (*FlagClause) PlaceHolder ¶ added in v0.2.0
func (f *FlagClause) PlaceHolder(placeholder string) *FlagClause
PlaceHolder sets the place-holder string used for flag values in the help. The default behaviour is to use the value provided by Default() if provided, then fall back on the capitalized flag name.
func (*FlagClause) Required ¶
func (f *FlagClause) Required() *FlagClause
Required makes the flag required. You can not provide a Default() value to a Required() flag.
func (*FlagClause) Short ¶
func (f *FlagClause) Short(name byte) *FlagClause
Short sets the short flag name.
func (*FlagClause) String ¶
func (p *FlagClause) String() (target *string)
String sets the parser to a string parser.
func (*FlagClause) StringMapVar ¶
StringMap provides key=value parsing into a map.
func (*FlagClause) StringVar ¶
func (p *FlagClause) StringVar(target *string)
String sets the parser to a string parser.
func (*FlagClause) Strings ¶
func (p *FlagClause) Strings() (target *[]string)
Strings appends multiple occurrences to a string slice.
func (*FlagClause) StringsVar ¶
func (p *FlagClause) StringsVar(target *[]string)
Strings appends multiple occurrences to a string slice.
func (*FlagClause) TCPListVar ¶
TCPVar (host:port) address list.
func (*FlagClause) URLListVar ¶
URLListVar provides a parsed list of url.URL values.
type Getter ¶
type Getter interface { Value Get() interface{} }
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 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, and adds a --no-name counterpart for negating the flag.
Example ¶
This example ilustrates how to define custom parsers. HTTPHeader cumulatively parses each encountered --header flag into a http.Header struct.
package main import ( "fmt" "net/http" "strings" ) type HTTPHeaderValue http.Header func (h *HTTPHeaderValue) Set(value string) error { parts := strings.SplitN(value, ":", 2) if len(parts) != 2 { return fmt.Errorf("expected HEADER:VALUE got '%s'", value) } (*http.Header)(h).Add(parts[0], parts[1]) return nil } func (h *HTTPHeaderValue) String() string { return "" } func HTTPHeader(s Settings) (target *http.Header) { target = new(http.Header) s.SetValue((*HTTPHeaderValue)(target)) return } // This example ilustrates how to define custom parsers. HTTPHeader // cumulatively parses each encountered --header flag into a http.Header struct. func main() { var ( curl = New("curl", "transfer a URL") headers = HTTPHeader(curl.Flag("headers", "Add HTTP headers to the request.").Short('H').PlaceHolder("HEADER:VALUE")) ) curl.Parse([]string{"-H Content-Type:application/octet-stream"}) for key, value := range *headers { fmt.Printf("%s = %s\n", key, value) } }
Output: