Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
rwi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

gocli - Minimal Packages for Command-Line Interface

check vulns lint status GitHub license GitHub release

Declare gocli module

See go.mod file.

Usage of gocli package

package main

import (
    "os"

    "github.com/spiegel-im-spiegel/gocli/exitcode"
    "github.com/spiegel-im-spiegel/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/spiegel-im-spiegel/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/spiegel-im-spiegel/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/spiegel-im-spiegel/gocli/config"
)

path := config.Path("app", "config.json")
fmt.Println(path)
// Output:
// /home/username/.config/app/config.json

About

Minimal Packages for Command-Line Interface

Topics

Resources

License

Packages

No packages published
You can’t perform that action at this time.