gocli

module
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 3, 2018 License: CC0-1.0

README

gocli - Minimal Packages for Command-Line Interface

Build Status GitHub license

Install

$ go get -u github.com/spiegel-im-spiegel/gocli

Installing by dep.

$ dep ensure -add github.com/spiegel-im-spiegel/gocli

Example

package main

import (
    "fmt"

    "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
	}
}

Directories

Path Synopsis
Package exitcode : OS exit code enumeration These codes are licensed under CC0.
Package exitcode : OS exit code enumeration These codes are licensed under CC0.
Package rwi : Reader/Writer Interface for command-line These codes are licensed under CC0.
Package rwi : Reader/Writer Interface for command-line These codes are licensed under CC0.
Package signal : Handling SIGNAL with context package These codes are licensed under CC0.
Package signal : Handling SIGNAL with context package These codes are licensed under CC0.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL