This is a modified fork of google/subcommands that uses lucasepe/pflag

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.


Set up a ‘print’ subcommand:

import (


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 *pflag.FlagSet) {
  f.BoolVar(&p.capitalize, "capitalize", false, "capitalize output")

func (p *printCmd) Execute(_ context.Context, f *pflag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
  for _, arg := range f.Args() {
    if p.capitalize {
      arg = strings.ToUpper(arg)
    fmt.Printf("%s ", arg)
  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(&printCmd{}, "")

  ctx := context.Background()


View Github