Gocli Package v0.7.0 Released
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 で公開している。 一切の権利を放棄しているので自由に持っていって弄っていただいて構わない。
ブックマーク
参考図書
- プログラミング言語Go
- アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)
- 丸善出版 2016-06-20 (Release 2021-07-13)
- Kindle版
- B099928SJD (ASIN)
- 評価
Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想はこちら。