Go CLI Library
cli is a library for implementing command-line interfaces in Go.
cli is the library that powers the CLI for
Packer,
Consul,
Vault,
Terraform,
Nomad, and more.
Features
-
Easy sub-command based CLIs: cli foo
, cli bar
, etc.
-
Support for nested subcommands such as cli foo bar
.
-
Optional support for default subcommands so cli
does something
other than error.
-
Support for shell autocompletion of subcommands, flags, and arguments
with callbacks in Go. You don't need to write any shell code.
-
Automatic help generation for listing subcommands.
-
Automatic help flag recognition of -h
, --help
, etc.
-
Automatic version flag recognition of -v
, --version
.
-
Helpers for interacting with the terminal, such as outputting information,
asking for input, etc. These are optional, you can always interact with the
terminal however you choose.
-
Use of Go interfaces/types makes augmenting various parts of the library a
piece of cake.
Example
Below is a simple example of creating and running a CLI
package main
import (
"log"
"os"
"github.com/mitchellh/cli"
)
func main() {
c := cli.NewCLI("app", "1.0.0")
c.Args = os.Args[1:]
c.Commands = map[string]cli.CommandFactory{
"foo": fooCommandFactory,
"bar": barCommandFactory,
}
exitStatus, err := c.Run()
if err != nil {
log.Println(err)
}
os.Exit(exitStatus)
}