commit | 5ef2aa786fcf2fec7eb5f9f9c7ef9cbabc5345cc | [log] [tgz] |
---|---|---|
author | Andrew Jackura <ajackura@google.com> | Tue Feb 09 19:24:31 2016 -0500 |
committer | Andrew Jackura <ajackura@google.com> | Tue Feb 09 19:24:31 2016 -0500 |
tree | 2d43b661fc5f6d3cb7104e5e8d5e604b384888be | |
parent | 5897fa4aeb3404a95d0272a465c106e99c4c379c [diff] |
Remove Github markdown features
Subcommands is a Go package that implements a simple way for a single command to have many subcommands, each of which takes arguments and so forth.
This is not an official Google product.
Set up a ‘print’ subcommand:
import ( "flag" "fmt" "os" "strings" "github.com/google/subcommands" "golang.org/x/net/context" ) type printCmd struct { capitalize bool } func (*printCmd) Name() string { return "print" } func (*printCmd) Synopsis() string { return "Print args to stdout." } func (*printCmd) Usage() string { return `print [-capitalize] <some text>: Print args to stdout. ` } func (p *printCmd) SetFlags(f *flag.FlagSet) { f.BoolVar(&p.capitalize, "capitalize", false, "capitalize output") } func (p *printCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { for _, arg := range f.Args() { if p.capitalize { arg = strings.ToUpper(arg) } fmt.Printf("%s ", arg) } fmt.Println() return subcommands.ExitSuccess }
Register using the default Commander, also use some built in subcommands, finally run Execute using ExitStatus as the exit code:
func main() { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(subcommands.FlagsCommand(), "") subcommands.Register(subcommands.CommandsCommand(), "") subcommands.Register(&print{}, "") ctx := context.Background() os.Exit(int(subcommands.Execute(ctx))) }