.. | ||
.gitignore | ||
.travis.yml | ||
doc.go | ||
docopt.go | ||
error.go | ||
LICENSE | ||
opts.go | ||
pattern.go | ||
README.md | ||
test_golang.docopt | ||
testcases.docopt | ||
token.go |
docopt-go
An implementation of docopt in the Go programming language.
docopt helps you create beautiful command-line interfaces easily:
package main
import (
"fmt"
"github.com/docopt/docopt-go"
)
func main() {
:= `Naval Fate.
usage
Usage:
naval_fate ship new <name>...
naval_fate ship <name> move <x> <y> [--speed=<kn>]
naval_fate ship shoot <x> <y>
naval_fate mine (set|remove) <x> <y> [--moored|--drifting]
naval_fate -h | --help
naval_fate --version
Options:
-h --help Show this screen.
--version Show version.
--speed=<kn> Speed in knots [default: 10].
--moored Moored (anchored) mine.
--drifting Drifting mine.`
, _ := docopt.ParseDoc(usage)
arguments.Println(arguments)
fmt}
docopt parses command-line arguments based on a help message. Don’t write parser code: a good help message already has all the necessary information in it.
Installation
⚠ Use the alias “docopt-go”. To use docopt in your Go code:
import "github.com/docopt/docopt-go"
To install docopt in your $GOPATH
:
$ go get github.com/docopt/docopt-go
API
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:
.ParseDoc(usage) docopt
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:
.ParseArgs(usage, argv, "1.2.3") docopt
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.
:= &docopt.Parser{
parser : docopt.PrintHelpOnly,
HelpHandler: true,
OptionsFirst}
, err := parser.ParseArgs(usage, argv, "") opts
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:
, _ := opts.Bool("--flag")
flag, _ := opts.Int("<seconds>") secs
Additionally, you can Bind
these to a struct, assigning
option values to the exported fields of that struct, all at once.
var config struct {
string `docopt:"<cmd>"`
Command int `docopt:"-n"`
Tries bool // Gets the value of --force
Force }
.Bind(&config) opts
More documentation is available at godoc.org.
Unit Testing
Unit testing your own usage docs is recommended, so you can be sure that for a given command line invocation, the expected options are set. An example of how to do this is in the examples folder.
Tests
All tests from the Python version are implemented and passing at Travis CI. New language-agnostic tests have been added to test_golang.docopt.
To run tests for docopt-go, use go test
.