Adding subcommands to subcommands
So far, we've add the subtract and sum subcommands to the math root
command. But it's possible to also add subcommands to other subcommands.
Let's build a subcommand that logically groups subtract and add, called
arithmetic. Let's break out cobra-cli to build out the base subcommand
arithmetic.
$ cobra-cli add arithmetic
arithmetic created at /Users/me/.go/src/github.com/opdev/cobra-primer/math
With this in place, let's go ahead and disable the Run function so that calling
math arithmetic just displays help output.
var arithmeticCmd = &cobra.Command{
Use: "arithmetic",
Short: "basic arithmetic functions",
}
To move sum and subtract to be organized under arithmetic instead of the
root command math, just open sum.go and subtract.go to their init()
functions, and replace rootCmd.AddCommand with arithmeticCmd.AddCommand.
Here's what subtract.go's init function looks like now:
func init() {
arithmeticCmd.AddCommand(subtractCmd)
subtractCmd.Flags().BoolP("invert-sign", "i", false, "inverts the sign of the result.")
}
And our command "tree" went from this:

to this:

And our commands are logically grouped with the arithmetic subcommand:
$ go build . && ./math arithmetic --help
basic arithmetic functions
Usage:
math arithmetic [command]
Available Commands:
subtract subtract integers
sum add integers
Flags:
-h, --help help for arithmetic
Use "math arithmetic [command] --help" for more information about a command.
If you were scaffolding a net-new command using cobra-cli and you wanted it
organized under some command OTHER than the root command, you can pass the
--parent flag to cobra-cli which will organize the new command under the new
parent.