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").MetaVarFromDefault().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) MetaVar(metavar string) *FlagClause
- func (f *FlagClause) MetaVarFromDefault() *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 {
Shorthand byte
// 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) MetaVar ¶
func (f *FlagClause) MetaVar(metavar string) *FlagClause
MetaVar sets the placeholder string used for flag values in the help. If the magic string "%DEFAULT%" is used, the Default() value of the flag will be used.
func (*FlagClause) MetaVarFromDefault ¶
func (f *FlagClause) MetaVarFromDefault() *FlagClause
MetaVarFromDefault uses the default value for the flag as the MetaVar.
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').MetaVar("HEADER:VALUE"))
)
curl.Parse([]string{"-H Content-Type:application/octet-stream"})
for key, value := range *headers {
fmt.Printf("%s = %s\n", key, value)
}
}
Output:
