57 lines
1 KiB
Markdown
57 lines
1 KiB
Markdown
# app
|
|
|
|
[![Go Reference](https://pkg.go.dev/badge/github.com/neonxp/app.svg)](https://pkg.go.dev/github.com/neonxp/app)
|
|
|
|
Simple cli applications runner.
|
|
|
|
## Usage
|
|
|
|
Commands must implements `app.Command` interface:
|
|
|
|
```go
|
|
type exampleCommand struct {
|
|
test string
|
|
}
|
|
|
|
func (c *exampleCommand) Name() string {
|
|
return "example"
|
|
}
|
|
|
|
func (c *exampleCommand) Usage() string {
|
|
return "just example command"
|
|
}
|
|
|
|
func (c *exampleCommand) Flags() *flag.FlagSet {
|
|
fs := flag.NewFlagSet(c.Name(), flag.ExitOnError)
|
|
fs.StringVar(&c.test, "test", "value", "test flag")
|
|
return fs
|
|
}
|
|
|
|
func (c *exampleCommand) Run(args []string) error {
|
|
fmt.Printf("Runned %s command with flag -test=%s and args: %v", c.Name(), c.test, args)
|
|
return nil
|
|
}
|
|
```
|
|
|
|
Main file example:
|
|
|
|
```go
|
|
package main
|
|
|
|
import "github.com/neonxp/app"
|
|
|
|
func main() {
|
|
app := app.New([]app.Command{
|
|
exampleCommand{}, // <- Register command
|
|
})
|
|
if err := app.Start(os.Args); err != nil { // <- Run!
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
```
|
|
|
|
That's all!
|
|
|
|
[Full example](/example/example.go)
|