Gocli
Minimal Packages for Command-Line Interface
Install / Use
/learn @goark/GocliREADME
gocli - Minimal Packages for Command-Line Interface
This package is required Go 1.16 or later.
Migrated repository to github.com/goark/gocli
Declare gocli module
See go.mod file.
Usage of gocli package
package main
import (
"os"
"github.com/goark/gocli/exitcode"
"github.com/goark/gocli/rwi"
)
func run(ui *rwi.RWI) exitcode.ExitCode {
ui.Outputln("Hello world")
return exitcode.Normal
}
func main() {
run(rwi.New(
rwi.WithReader(os.Stdin),
rwi.WithWriter(os.Stdout),
rwi.WithErrorWriter(os.Stderr),
)).Exit()
}
Handling SIGNAL with Context Package
package main
import (
"context"
"fmt"
"os"
"time"
"github.com/goark/gocli/signal"
)
func ticker(ctx context.Context) error {
t := time.NewTicker(1 * time.Second) // 1 second cycle
defer t.Stop()
for {
select {
case now := <-t.C: // ticker event
fmt.Println(now.Format(time.RFC3339))
case <-ctx.Done(): // cancel event from context
fmt.Println("Stop ticker")
return ctx.Err()
}
}
}
func Run() error {
errCh := make(chan error, 1)
defer close(errCh)
go func() {
child, cancelChild := context.WithTimeout(
signal.Context(context.Background(), os.Interrupt), // cancel event by SIGNAL
10*time.Second, // timeout after 10 seconds
)
defer cancelChild()
errCh <- ticker(child)
}()
err := <-errCh
fmt.Println("Done")
return err
}
func main() {
if err := Run(); err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
}
Search Files and Directories (w/ Wildcard)
import (
"fmt"
"github.com/goark/gocli/file"
)
result := file.Glob("**/*.[ch]", file.NewGlobOption())
fmt.Println(result)
// Output:
// [testdata/include/source.h testdata/source.c]
Configuration file and directory
Support $XDG_CONFIG_HOME environment value (XDG Base Directory)
import (
"fmt"
"github.com/goark/gocli/config"
)
path := config.Path("app", "config.json")
fmt.Println(path)
// Output:
// /home/username/.config/app/config.json
User cache file and directory
Support $XDG_CACHE_HOME environment value (XDG Base Directory)
import (
"fmt"
"github.com/goark/gocli/cache"
)
path := cache.Path("app", "access.log")
fmt.Println(path)
// Output:
// /home/username/.cache/app/access.log
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
343.1kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
