mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-29 14:12:38 +01:00
50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
|
/*
|
||
|
Package docopt parses command-line arguments based on a help message.
|
||
|
|
||
|
Given a conventional command-line help message, docopt processes the arguments.
|
||
|
See https://github.com/docopt/docopt#help-message-format for a description of
|
||
|
the help message format.
|
||
|
|
||
|
This package exposes three different APIs, depending on the level of control
|
||
|
required. The first, simplest way to parse your docopt usage is to just call:
|
||
|
|
||
|
docopt.ParseDoc(usage)
|
||
|
|
||
|
This will use os.Args[1:] as the argv slice, and use the default parser
|
||
|
options. If you want to provide your own version string and args, then use:
|
||
|
|
||
|
docopt.ParseArgs(usage, argv, "1.2.3")
|
||
|
|
||
|
If the last parameter (version) is a non-empty string, it will be printed when
|
||
|
--version is given in the argv slice. Finally, we can instantiate our own
|
||
|
docopt.Parser which gives us control over how things like help messages are
|
||
|
printed and whether to exit after displaying usage messages, etc.
|
||
|
|
||
|
parser := &docopt.Parser{
|
||
|
HelpHandler: docopt.PrintHelpOnly,
|
||
|
OptionsFirst: true,
|
||
|
}
|
||
|
opts, err := parser.ParseArgs(usage, argv, "")
|
||
|
|
||
|
In particular, setting your own custom HelpHandler function makes unit testing
|
||
|
your own docs with example command line invocations much more enjoyable.
|
||
|
|
||
|
All three of these return a map of option names to the values parsed from argv,
|
||
|
and an error or nil. You can get the values using the helpers, or just treat it
|
||
|
as a regular map:
|
||
|
|
||
|
flag, _ := opts.Bool("--flag")
|
||
|
secs, _ := opts.Int("<seconds>")
|
||
|
|
||
|
Additionally, you can `Bind` these to a struct, assigning option values to the
|
||
|
exported fields of that struct, all at once.
|
||
|
|
||
|
var config struct {
|
||
|
Command string `docopt:"<cmd>"`
|
||
|
Tries int `docopt:"-n"`
|
||
|
Force bool // Gets the value of --force
|
||
|
}
|
||
|
opts.Bind(&config)
|
||
|
*/
|
||
|
package docopt
|