update API and comments for godoc
4 files changed
tree: b55a9996bd336ee28d0fef227ee24e324fc5a08c
  1. examples/
  2. .gitignore
  3. docopt.go
  4. docopt_test.go
  5. LICENSE
  6. README.md
  7. test_golang.docopt
  8. testcases.docopt
README.md

docopt.go

Golang implementation of docopt 0.6.1+fix

Installation

import “github.com/kbatten/docopt.go” and then run go get.

API

These may be updated because it seems like a cumbersome way to get around optional parameters

func docopt.Parse(doc string, argv []string, help bool, version string, optionsFirst bool)
(args map[string]interface{}, output string, err error)
  • parse and return a map of args, output and all errors
func docopt.ParseEasy(doc string)
args map[string]interface{}
  • parse just doc and return a map of args
  • handle all printing and non-fatal errors
  • panic on fatal errors
  • exit on user error or help
func docopt.ParseLoud(doc string, argv []string, help bool, version string, optionsFirst bool)
args map[string]interface{}
  • parse and return a map of args
  • handle all printing and non-fatal errors
  • panic on fatal errors
  • exit on user error or help
func docopt.ParseQuiet(doc string, argv []string, help bool, version string, optionsFirst bool)
(args map[string]interface{}, err error)
  • parse and return a map of args and fatal errors
  • handle printing of help
  • exit on user error or help

arguments

doc, usage string based on docopt language.

argv, optional argument vector. set to nil to use os.Args.

help, set to true to have docopt automatically handle -h and --help.

version, set to a non-empty string that will automatically be shown with --version.

optionsFirst, set to true to disallow mixing options and positional arguments.

return values

args, map[string]interface{}. interface{} can be bool, int, string, []string.

output, help output that would normally be displayed by the other docopt.Parse* functions.

err

  • nil, no error
  • *docopt.UserError, user argument error
  • *docopt.LanguageError, developer error

Example

package main

import (
    "fmt"
    docopt "github.com/kbatten/docopt.go"
)

func main() {
usage := `Naval Fate.

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.`

    arguments := docopt.ParseLoud(usage, nil, true, "Naval Fate 2.0", false)
    fmt.Println(arguments)
}

Testing

All tests from the python version have been implemented and all are passing.

New language agnostic tests have been added to test_golang.docopt.

To run them use go test.