- Go 99.5%
- Makefile 0.5%
Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com> |
||
|---|---|---|
| .github | ||
| .go-version | ||
| autocomplete.go | ||
| CHANGELOG.md | ||
| cli.go | ||
| cli_test.go | ||
| command.go | ||
| command_mock.go | ||
| command_mock_test.go | ||
| go.mod | ||
| go.sum | ||
| help.go | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| ui.go | ||
| ui_colored.go | ||
| ui_common.go | ||
| ui_concurrent.go | ||
| ui_concurrent_test.go | ||
| ui_js.go | ||
| ui_mock.go | ||
| ui_mock_test.go | ||
| ui_test.go | ||
| ui_writer.go | ||
| ui_writer_test.go | ||
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
clidoes 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/hashicorp/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)
}