Add an example to the README
1 file changed
tree: acb47fe80c1ebf6391b35e055d14ffb230dbb19d
  1. CONTRIBUTING
  2. LICENSE
  3. README.md
  4. subcommands.go
README.md

subcommands

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.

Usage

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)))
}