In go, I know how to use the github.com/pborman/getopt
package to do something like ## Command line parsing of #getopt.
prog, I would like the following code to all perform the exact same function:
prog -r [other args] prog -r [other args] prog --recurse [other args] prog --recursive [other args]
optrecurse and
optrecursive ...
optrecurse := getopt.boollong("recurse", 'r', "run recursively") optrecursive := getopt.boollong("recursive", 'r', "run recursively")
I would like something similar to ruby's
optionparser package, with more than two possibilities for any given command line option. Here is a ruby example...
$isRecursive = false parser = OptionParser.new { |opts| opts.on('-r', '-R', '--recurse', '--recursive') { |arg| # All four possibilities are handled with one, single "opts.on" block. $isRecursive = true } # ... etc. ... }
The
github.com/clagraff/argparse package I originally mentioned in this "answer" is no longer supported. However, I found a more modern and still supported package that I can use to provide the exact functionality in a manner similar to what is provided in parameter parsing packages for other languages like ruby and python:
github.com/tcler/ cmdline -go/cmdline.
package main import ( "fmt"; "os"; "github.com/tcler/cmdline-go/cmdline"; ) func main() { var nargv []string = os.args[1:] var cli cmdline.cmdline var options = []cmdline.option { {help: "options:"}, {names: "r r recurse recursive", argtype: cmdline.n, help: "run recursively"}, } cli = cmdline.parse(options, nargv) has_invalid := false for _, v := range cli.invalidoptions { if !has_invalid { fmt.println() } fmt.println(v) has_invalid = true } if has_invalid { fmt.println() cmdline.getusage(options) os.exit(1) } recursivemode := cli.getoptionargstring("r") fmt.printf("recursive mode: \"%s\"\n", recursivemode) }
% go run prog.go -r % go run prog.go -r % go run prog.go --recurse % go run prog.go --recursive
recursive mode: "set"
which is , just go run prog.go), it outputs the following:
recursive mode: ""
-x, it fails like this:
% go run prog.go -x option: 'x' undefined Options: -r -R --recurse --recursive Run recursively [ plus some other "help" text ]
The above is the detailed content of How can I have more than two command line flags control the same behavior?. For more information, please follow other related articles on the PHP Chinese website!