Struct-based argument parsing in Go
Go to file
Alex Flint aa20f7be39 udpate readme 2015-10-31 18:51:21 -07:00
example udpate readme 2015-10-31 18:48:38 -07:00
.gitignore Initial commit 2015-10-31 18:30:06 -07:00
LICENSE Initial commit 2015-10-31 18:30:06 -07:00
README.md udpate readme 2015-10-31 18:51:21 -07:00
parse.go udpate readme 2015-10-31 18:48:38 -07:00
parse_test.go added usage generation 2015-10-31 18:26:58 -07:00
usage.go udpate readme 2015-10-31 18:48:38 -07:00

README.md

Argument parsing for Go

var args struct {
	Foo string
	Bar bool
}
arg.MustParse(&args)
fmt.Println(args.Foo, args.Bar)
$ ./example --foo=hello --bar
hello True

Default values

var args struct {
	Foo string
	Bar bool
}
args.Foo = "default value"
arg.MustParse(&args)

Marking options as required

var args struct {
	Foo string `arg:"required"`
	Bar bool
}
arg.MustParse(&args)

Positional argument

var args struct {
	Input   string   `arg:"positional"`
	Output  []string `arg:"positional"`
	Verbose bool
}
arg.MustParse(&args)
fmt.Println("Input:", input)
fmt.Println("Output:", output)
$ ./example src.txt x.out y.out z.out
Input: src.txt
Output: [x.out y.out z.out]

Usage strings

var args struct {
	Input    string   `arg:"positional"`
	Output   []string `arg:"positional"`
	Verbose  bool     `arg:"-v,help:verbosity level"`
	Dataset  string   `arg:"help:dataset to use"`
	Optimize int      `arg:"-O,help:optimization level"`
}
arg.MustParse(&args)
$ ./example -h
usage: [--verbose] [--dataset DATASET] [--optimize OPTIMIZE] [--help] INPUT [OUTPUT [OUTPUT ...]] 

positional arguments:
  input
  output

options:
--verbose, -v            verbosity level
--dataset DATASET        dataset to use
--optimize OPTIMIZE, -O OPTIMIZE
                         optimization level
--help, -h               print this help message

Options with multiple values

var args struct {
	Database string
	IDs      []int64
}
arg.MustParse(&args)
fmt.Printf("Fetching the following IDs from %s: %q", args.Database, args.IDs)
./example -database foo -ids 1 2 3
Fetching the following IDs from foo: [1 2 3]