arg/README.md

1.4 KiB

Argument parsing for Go.

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

Setting defaults 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:

$ ./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]