2015-10-31 20:48:38 -05:00
|
|
|
# Argument parsing for Go
|
2015-10-31 20:46:56 -05:00
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```go
|
2015-10-31 20:46:56 -05:00
|
|
|
var args struct {
|
2015-10-31 20:51:21 -05:00
|
|
|
Foo string
|
|
|
|
Bar bool
|
2015-10-31 20:46:56 -05:00
|
|
|
}
|
|
|
|
arg.MustParse(&args)
|
2015-10-31 20:49:20 -05:00
|
|
|
fmt.Println(args.Foo, args.Bar)
|
2015-10-31 20:46:56 -05:00
|
|
|
```
|
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```shell
|
2015-10-31 20:46:56 -05:00
|
|
|
$ ./example --foo=hello --bar
|
2015-10-31 20:49:20 -05:00
|
|
|
hello True
|
2015-10-31 20:46:56 -05:00
|
|
|
```
|
|
|
|
|
2015-10-31 20:48:38 -05:00
|
|
|
### Default values
|
2015-10-31 20:46:56 -05:00
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```go
|
2015-10-31 20:46:56 -05:00
|
|
|
var args struct {
|
|
|
|
Foo string
|
|
|
|
Bar bool
|
|
|
|
}
|
|
|
|
args.Foo = "default value"
|
|
|
|
arg.MustParse(&args)
|
|
|
|
```
|
|
|
|
|
2015-10-31 20:48:38 -05:00
|
|
|
### Marking options as required
|
2015-10-31 20:46:56 -05:00
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```go
|
2015-10-31 20:46:56 -05:00
|
|
|
var args struct {
|
|
|
|
Foo string `arg:"required"`
|
|
|
|
Bar bool
|
|
|
|
}
|
|
|
|
arg.MustParse(&args)
|
|
|
|
```
|
|
|
|
|
2015-10-31 20:48:38 -05:00
|
|
|
### Positional argument
|
2015-10-31 20:46:56 -05:00
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```go
|
2015-10-31 20:46:56 -05:00
|
|
|
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]
|
|
|
|
```
|
|
|
|
|
2015-10-31 20:48:38 -05:00
|
|
|
### Usage strings
|
2015-10-31 20:51:21 -05:00
|
|
|
```go
|
|
|
|
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)
|
|
|
|
```
|
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```shell
|
2015-10-31 20:46:56 -05:00
|
|
|
$ ./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
|
|
|
|
```
|
|
|
|
|
2015-10-31 20:48:38 -05:00
|
|
|
### Options with multiple values
|
2015-10-31 20:51:21 -05:00
|
|
|
```go
|
2015-10-31 20:46:56 -05:00
|
|
|
var args struct {
|
|
|
|
Database string
|
|
|
|
IDs []int64
|
|
|
|
}
|
|
|
|
arg.MustParse(&args)
|
|
|
|
fmt.Printf("Fetching the following IDs from %s: %q", args.Database, args.IDs)
|
|
|
|
```
|
|
|
|
|
2015-10-31 20:49:20 -05:00
|
|
|
```shell
|
2015-10-31 20:46:56 -05:00
|
|
|
./example -database foo -ids 1 2 3
|
|
|
|
Fetching the following IDs from foo: [1 2 3]
|
|
|
|
```
|