2015-11-01 13:34:22 -06:00
|
|
|
package arg
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
2019-05-03 14:56:41 -05:00
|
|
|
"strings"
|
2015-11-01 13:34:22 -06:00
|
|
|
)
|
|
|
|
|
2019-05-03 14:56:41 -05:00
|
|
|
func split(s string) []string {
|
|
|
|
return strings.Split(s, " ")
|
|
|
|
}
|
|
|
|
|
2015-11-01 13:34:22 -06:00
|
|
|
// This example demonstrates basic usage
|
2016-07-31 11:14:44 -05:00
|
|
|
func Example() {
|
2015-11-01 13:34:22 -06:00
|
|
|
// These are the args you would pass in on the command line
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example --foo=hello --bar")
|
2015-11-01 13:34:22 -06:00
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Foo string
|
|
|
|
Bar bool
|
|
|
|
}
|
2015-11-01 15:36:14 -06:00
|
|
|
MustParse(&args)
|
2015-11-01 13:34:22 -06:00
|
|
|
fmt.Println(args.Foo, args.Bar)
|
2019-05-03 14:56:41 -05:00
|
|
|
// output: hello true
|
2015-11-01 13:34:22 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// This example demonstrates arguments that have default values
|
2016-07-31 11:14:44 -05:00
|
|
|
func Example_defaultValues() {
|
2015-11-01 13:34:22 -06:00
|
|
|
// These are the args you would pass in on the command line
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example")
|
2015-11-01 13:34:22 -06:00
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Foo string
|
|
|
|
}
|
|
|
|
args.Foo = "default value"
|
2015-11-01 15:36:14 -06:00
|
|
|
MustParse(&args)
|
2019-05-03 14:56:41 -05:00
|
|
|
fmt.Println(args.Foo)
|
|
|
|
// output: default value
|
2015-11-01 13:34:22 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// This example demonstrates arguments that are required
|
2016-07-31 11:14:44 -05:00
|
|
|
func Example_requiredArguments() {
|
2015-11-01 13:34:22 -06:00
|
|
|
// These are the args you would pass in on the command line
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example --foo=abc --bar")
|
2015-11-01 13:34:22 -06:00
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Foo string `arg:"required"`
|
|
|
|
Bar bool
|
|
|
|
}
|
2015-11-01 15:36:14 -06:00
|
|
|
MustParse(&args)
|
2019-05-03 14:56:41 -05:00
|
|
|
fmt.Println(args.Foo, args.Bar)
|
|
|
|
// output: abc true
|
2015-11-01 13:34:22 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// This example demonstrates positional arguments
|
2016-07-31 11:14:44 -05:00
|
|
|
func Example_positionalArguments() {
|
2015-11-01 13:34:22 -06:00
|
|
|
// These are the args you would pass in on the command line
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example in out1 out2 out3")
|
2015-11-01 13:34:22 -06:00
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Input string `arg:"positional"`
|
|
|
|
Output []string `arg:"positional"`
|
|
|
|
}
|
2015-11-01 15:36:14 -06:00
|
|
|
MustParse(&args)
|
2019-05-03 14:56:41 -05:00
|
|
|
fmt.Println("In:", args.Input)
|
|
|
|
fmt.Println("Out:", args.Output)
|
|
|
|
// output:
|
|
|
|
// In: in
|
|
|
|
// Out: [out1 out2 out3]
|
2015-11-01 13:34:22 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// This example demonstrates arguments that have multiple values
|
2016-07-31 11:14:44 -05:00
|
|
|
func Example_multipleValues() {
|
2015-11-01 13:34:22 -06:00
|
|
|
// The args you would pass in on the command line
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example --database localhost --ids 1 2 3")
|
2015-11-01 13:34:22 -06:00
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Database string
|
|
|
|
IDs []int64
|
|
|
|
}
|
2015-11-01 15:36:14 -06:00
|
|
|
MustParse(&args)
|
2019-05-03 14:56:41 -05:00
|
|
|
fmt.Printf("Fetching the following IDs from %s: %v", args.Database, args.IDs)
|
|
|
|
// output: Fetching the following IDs from localhost: [1 2 3]
|
2015-11-01 13:34:22 -06:00
|
|
|
}
|
|
|
|
|
2017-03-03 06:12:17 -06:00
|
|
|
// This eample demonstrates multiple value arguments that can be mixed with
|
|
|
|
// other arguments.
|
|
|
|
func Example_multipleMixed() {
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example -c cmd1 db1 -f file1 db2 -c cmd2 -f file2 -f file3 db3 -c cmd3")
|
2017-03-03 06:12:17 -06:00
|
|
|
var args struct {
|
|
|
|
Commands []string `arg:"-c,separate"`
|
|
|
|
Files []string `arg:"-f,separate"`
|
|
|
|
Databases []string `arg:"positional"`
|
|
|
|
}
|
|
|
|
MustParse(&args)
|
|
|
|
fmt.Println("Commands:", args.Commands)
|
2019-05-03 14:56:41 -05:00
|
|
|
fmt.Println("Files:", args.Files)
|
|
|
|
fmt.Println("Databases:", args.Databases)
|
|
|
|
|
|
|
|
// output:
|
|
|
|
// Commands: [cmd1 cmd2 cmd3]
|
|
|
|
// Files: [file1 file2 file3]
|
|
|
|
// Databases: [db1 db2 db3]
|
2017-03-03 06:12:17 -06:00
|
|
|
}
|
|
|
|
|
2015-11-01 13:34:22 -06:00
|
|
|
// This example shows the usage string generated by go-arg
|
2016-07-31 11:14:44 -05:00
|
|
|
func Example_usageString() {
|
2015-11-01 13:34:22 -06:00
|
|
|
// These are the args you would pass in on the command line
|
2019-05-03 14:56:41 -05:00
|
|
|
os.Args = split("./example --help")
|
2015-11-01 13:34:22 -06:00
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Input string `arg:"positional"`
|
|
|
|
Output []string `arg:"positional"`
|
2019-05-03 14:56:41 -05:00
|
|
|
Verbose bool `arg:"-v" help:"verbosity level"`
|
|
|
|
Dataset string `help:"dataset to use"`
|
2015-11-01 13:34:22 -06:00
|
|
|
Optimize int `arg:"-O,help:optimization level"`
|
|
|
|
}
|
2019-05-03 15:07:12 -05:00
|
|
|
|
|
|
|
// This is only necessary when running inside golang's runnable example harness
|
|
|
|
osExit = func(int) {}
|
|
|
|
|
2015-11-01 15:36:14 -06:00
|
|
|
MustParse(&args)
|
2019-05-03 15:07:12 -05:00
|
|
|
|
|
|
|
// output:
|
|
|
|
// Usage: example [--verbose] [--dataset DATASET] [--optimize OPTIMIZE] 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 display this help and exit
|
2015-11-01 13:34:22 -06:00
|
|
|
}
|
2019-05-03 17:02:10 -05:00
|
|
|
|
|
|
|
// This example shows the usage string generated by go-arg
|
|
|
|
func Example_usageStringWithSubcommand() {
|
|
|
|
// These are the args you would pass in on the command line
|
|
|
|
os.Args = split("./example --help")
|
|
|
|
|
|
|
|
type getCmd struct {
|
|
|
|
Item string `arg:"positional" help:"item to fetch"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type listCmd struct {
|
|
|
|
Format string `help:"output format"`
|
|
|
|
Limit int
|
|
|
|
}
|
|
|
|
|
|
|
|
var args struct {
|
|
|
|
Verbose bool
|
|
|
|
Get *getCmd `arg:"subcommand" help:"fetch an item and print it"`
|
|
|
|
List *listCmd `arg:"subcommand" help:"list available items"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// This is only necessary when running inside golang's runnable example harness
|
|
|
|
osExit = func(int) {}
|
|
|
|
|
|
|
|
MustParse(&args)
|
|
|
|
|
|
|
|
// output:
|
|
|
|
// Usage: example [--verbose]
|
|
|
|
//
|
|
|
|
// Options:
|
|
|
|
// --verbose
|
|
|
|
// --help, -h display this help and exit
|
|
|
|
//
|
|
|
|
// Commands:
|
|
|
|
// get fetch an item and print it
|
|
|
|
// list list available items
|
|
|
|
}
|