https://github.com/osspkg/go-console
https://github.com/osspkg/go-console
Last synced: 9 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/osspkg/go-console
- Owner: osspkg
- License: bsd-3-clause
- Created: 2024-07-28T16:05:24.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-07-28T21:53:29.000Z (over 1 year ago)
- Last Synced: 2025-04-08T19:35:32.691Z (about 1 year ago)
- Language: Go
- Size: 15.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Console application
## Creating console application
```go
import "go.osspkg.com/console"
// creating an instance of the application,
// specifying its name and description for flag: --help
root := console.New("tool", "help tool")
// adding root command
root.RootCommand(...)
// adding one or more commands
root.AddCommand(...)
// launching the app
root.Exec()
```
## Creating a simple command
```go
import "go.osspkg.com/x/console"
// creating a new team with settings
console.NewCommand(func(setter console.CommandSetter) {
// passing the command name and description
setter.Setup("simple", "first-level command")
// description of the usage example
setter.Example("simple aa/bb/cc -a=hello -b=123 --cc=123.456 -e")
// description of flags
setter.Flag(func(f console.FlagsSetter) {
// you can specify the flag's name, default value, and information about the flag's value.
f.StringVar("a", "demo", "this is a string argument")
f.IntVar("b", 1, "this is a int64 argument")
f.FloatVar("cc", 1e-5, "this is a float64 argument")
f.Bool("d", "this is a bool argument")
})
// argument validation: specifies the number of arguments,
// and validation function that should return
// value after validation and validation error
setter.ArgumentFunc(func(s []string) ([]string, error) {
if !strings.Contains(s[0], "/") {
return nil, fmt.Errorf("argument must contain /")
}
return strings.Split(s[0], "/"), nil
})
// command execution function
// first argument is a slice of arguments from setter.Argument
// all subsequent arguments must be in the same order and types as listed in setter.Flag
setter.ExecFunc(func(args []string, a string, b int64, c float64, d bool) {
fmt.Println(args, a, b, c, d)
})
}),
```
### example of execution results
**go run main.go --help**
```text
NAME:
tool - help tool
SYNOPSIS:
tool [arg]
COMMANDS:
one first level
```
**go run main.go simple --help**
```text
NAME
tool - help tool
SYNOPSIS
tool simple [arg]
DESCRIPTION
first-level command
ARGUMENTS
-a this is a string argument (default: demo)
-b this is a int64 argument (default: 1)
--cc this is a float64 argument (default: 1e-05)
-e this is a bool argument (default: false)
```
## Creating multi-level command tree
To create a multi-level command tree,
you need to add the child command to the parent via the `AddCommand` method.
At the same time, in the parent command, it is enough to
specify only the name and description via the `Setup` method.
```go
root := console.New("tool", "help tool")
simpleCmd := console.NewCommand(func(setter console.CommandSetter) {
setter.Setup("simple", "third level")
....
})
twoCmd := console.NewCommand(func(setter console.CommandSetter) {
setter.Setup("two", "second level")
setter.AddCommand(simpleCmd)
})
oneCmd := console.NewCommand(func(setter console.CommandSetter) {
setter.Setup("one", "first level")
setter.AddCommand(twoCmd)
})
root.AddCommand(oneCmd)
root.Exec()
```