Gocli Package v0.7.0 Released

no extension

spiegel-im-spiegel/gocli パッケージ v0.7.0 をリリースした。

v0.7.0 では SIGNAL 制御を行う gocli/signal サブパッケージを追加した。 具体的には context パッケージと組み合わせてキャンセル・イベントとして実装している。

例えば,こんな感じで使う。

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

Windows 環境では SIGNAL 周りのテストが出来ないので結構困ってたり。

spiegel-im-spiegel/gocli パッケージは CLI (Command-Line Interface) を組む際に(主に自分が)便利な細々とした機能を収録している。 他の人には使いにくいかもしれないし大した内容でもないため CC0 で公開している。 一切の権利を放棄しているので自由に持っていって弄っていただいて構わない。

ブックマーク

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
丸善出版 2016-06-20
単行本(ソフトカバー)
4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
評価     

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。

reviewed by Spiegel on 2016-07-13 (powered by PA-APIv5)