No.60: Goのコンテキストを誤解する
Contextは、APIの境界を超えて、デッドライン、キャンセル通知、値のリストを伝搬する。
デッドライン
context.WithTimeout関数を使ってコンテキストを作成する。
context.WithTimeoutは、タイムアウトまたはcancelが呼ばれるまでメモリ内に保持されるゴルーチンを作成する。
キャンセルシグナル
context.WithCancel 関数でキャンセルするコンテキストを作成できる。
グレースフルに処理されるようにしたい場合に使える。
コンテキスト値
キーバリューのリストを運ぶことができる。
キーには公開されていない独自型を使って、異なるパッケージに上書きされるのを防ぐ。
コンテキストのキャンセルを捕捉する
context.Contextは、←chan struct{}を返すDoneメソッドを公開している。
コンテキストに関する処理をキャンセルする必要がある時にクローズされる。
チャネルからメッセージを受信し続けたい場合はselectを使う。
コンテキストは便利だな。まだ十分使いこなせていないな。