疎通確認であったり、コネクションのkeepalive的な用途として、定期的に "ping" をしたいんだよなあ、という話があり
ぐるぐる回しっぱなしでよきに使えそうな感じのコードを書いてみた。
GitHub - sters/pinger: Ping somethings for use warmup and standby or others.
いまは土台と、HTTPしかないけど、MySQLとかなんかまあ他にもできそう
使い方はここを見てもらうのがわかりやすいかも
pinger/http_test.go at master · sters/pinger · GitHub
実践的にはこういう感じになるのかな。
ctx := context.Background()
fooPinger := pinger.NewWorker(...)
barPinger := pinger.NewWorker(...)
eg, ctx := errgroup.WithContext(ctx)
eg.Go(func() error { return fooPinger.Run(ctx) })
eg.Go(func() error { return barPinger.Run(ctx) })
if err := eg.Wait(); err != nil {
...
}
すくなくとも、いま主に触っているソレだとこういう感じで書くことになると思う。
余談だけど...
- type Hoge interface{}を書いて使ったりしていると、これがダックタイピングかとどっしり理解したので、やっばりやってみないとわからんなという気持ち
- sync パッケージ、使うものの並列にアクセスされる可能性あるやろなあ、ロックするか、くらいの感覚しかまだわかってないので要修行
- goroutine はちょっとわかってきた感じがある。おしごとでもぼちぼち書いたりしてる
- これまで簡単なツールをサクッとつくるの Node.js か PHP 使ってたことが多いけどもう Go 言語でよいのでは、と思えるくらいには書けるようになってきた感じ。
- よく使うようなライブラリとかツール群はまだイマイチなので都度 :innocent: