mirror of
https://github.com/spf13/cobra
synced 2024-11-24 14:47:12 +00:00
adding initial readme content
This commit is contained in:
parent
7791653039
commit
8f097506fc
1 changed files with 132 additions and 2 deletions
134
README.md
134
README.md
|
@ -1,2 +1,132 @@
|
||||||
cobra
|
# Cobra
|
||||||
=====
|
|
||||||
|
A Commander for modern go CLI interactions
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Cobra provides a simple interface to create powerful modern CLI
|
||||||
|
interfaces similar to git & go tools.
|
||||||
|
|
||||||
|
Cobra was inspired by go, go-Commander, gh and subcommand
|
||||||
|
|
||||||
|
|
||||||
|
## Concepts
|
||||||
|
|
||||||
|
There are 3 different core objects to become familiar with to use Cobra.
|
||||||
|
To help illustrate these 3 items better use the following as an example:
|
||||||
|
|
||||||
|
hugo server --port=1313
|
||||||
|
|
||||||
|
### Commander
|
||||||
|
|
||||||
|
The Commander is the head of your application. It holds the configuration
|
||||||
|
for your application. It also is responsible for all global flags.
|
||||||
|
|
||||||
|
In the example above 'hugo' is the commander.
|
||||||
|
|
||||||
|
|
||||||
|
### Command
|
||||||
|
|
||||||
|
Command is the central point of the application. Each interaction that
|
||||||
|
the application supports will be contained in a Command. A command can
|
||||||
|
have children commands and optionally run an action.
|
||||||
|
|
||||||
|
In the example above 'server' is the command
|
||||||
|
|
||||||
|
|
||||||
|
### Flags
|
||||||
|
|
||||||
|
A flag is a way to modify the behavior of an command. Cobra supports
|
||||||
|
fully posix compliant flags as well as remaining consistent with
|
||||||
|
the go flag package. A Cobra command has can define flags that
|
||||||
|
persist through to children commands and flags that are only available
|
||||||
|
to that command.
|
||||||
|
|
||||||
|
In the example above 'port' is the flag.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Implementing Cobra
|
||||||
|
|
||||||
|
Using Cobra is easy. First use go get to install the latest version
|
||||||
|
of the library.
|
||||||
|
|
||||||
|
$ go get github.com/spf13/cobra
|
||||||
|
|
||||||
|
Next include cobra in your application.
|
||||||
|
|
||||||
|
import "github.com/spf13/cobra"
|
||||||
|
|
||||||
|
|
||||||
|
While it may be counter intuitive, You define your commands first,
|
||||||
|
assign flags to them, add them to the commander and lastly
|
||||||
|
execute the commander.
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
|
||||||
|
## Simple Example
|
||||||
|
|
||||||
|
Import(
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
var echoTimes int
|
||||||
|
|
||||||
|
var cmdPrint = &cobra.Command{
|
||||||
|
Use: "print [string to print]",
|
||||||
|
Short: "Print anything to the screen",
|
||||||
|
Long: `an utterly useless command for testing.`,
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
fmt.Println("Print: " + strings.Join(args, " "))
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmdEcho = &cobra.Command{
|
||||||
|
Use: "echo [string to echo]",
|
||||||
|
Short: "Echo anything to the screen",
|
||||||
|
Long: `an utterly useless command for testing.`,
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
for i:=0; i < echoTimes; i++ {
|
||||||
|
fmt.Println("Echo: " + strings.Join(args, " "))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cmdEcho.Flags().IntVarP(&echoTimes, "times", "t", 1, "times to echo the input")
|
||||||
|
|
||||||
|
var commander = cobra.Commander()
|
||||||
|
commander.SetName("Cobra")
|
||||||
|
commander.AddCommand(cmdPrint, cmdEcho)
|
||||||
|
commander.Execute()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Release Notes
|
||||||
|
|
||||||
|
* **0.1.0** Sept 3, 2013
|
||||||
|
* Implement first draft
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
1. Fork it
|
||||||
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
||||||
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
||||||
|
4. Push to the branch (`git push origin my-new-feature`)
|
||||||
|
5. Create new Pull Request
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
Names in no particular order:
|
||||||
|
|
||||||
|
* [spf13](https://github.com/spf13)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
nitro is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/nitro/blob/master/LICENSE.txt)
|
||||||
|
|
Loading…
Reference in a new issue