はじめに
- golangで並行処理を書く時に、参考にさせていただいているサイトのリンク集
- 自分用のメモです
Advanced Go Concurrency 3 つのパターン - Block Rockin’ Codes
- loop を回して、定期的に外部サーバに GET を投げる
- 取得した結果を、 channel を経由して呼び出し側に渡す
- 呼び出し側から Close を呼ばれたら終了処理をする
- Close() を channel を用いた形で実装
- インターバル処理は、 time.Tick() を用いるこでイベントにできる
- buffer からの取り出しは channel への書き込みに
- nil channel
chanの使い方パターンメモ。 - GolangRdyJp
chanを扱う役割は5つある。
- makeする役(maker)
- writeする役(writer)
- readする役(reader)
- closeする役(closer)
- 破棄する役(GC)
- パイプラインジョブパターン
Goでchannelがcloseしてるかどうか知りたい というアンチパターン - beatsync.net
さて、このタイトルを見てGoに詳しく賢明な読者の方々は「あぁまたこの話題だよ、Goでchannelがcloseしてるかどうか知りたいようなパターンはだいたい書いてるアプリの設計とかchannelの使い方が間違ってるんだからやめとけ」と眉をひそめるかもしれません。
- closeしてるchannelに書き込むと死ぬ
- closeしてるchannelをcloseすると死ぬ
- nilなchannelに書き込むと永遠にブロックする
- nilなchannelから読み込むと永遠にブロックする
- closeしてないchannelに、データが来てない状態で読み込むとブロックする
Big Sky :: golang の channel を使ったテクニックあれこれ
- 下記のサンプル
- ポーリング
- キューイング
- ワーカー