Go言語100Tips No.60

mizue
·

No.60: Goのコンテキストを誤解する

  • Contextは、APIの境界を超えて、デッドライン、キャンセル通知、値のリストを伝搬する。

  • デッドライン

    • context.WithTimeout関数を使ってコンテキストを作成する。

    • context.WithTimeoutは、タイムアウトまたはcancelが呼ばれるまでメモリ内に保持されるゴルーチンを作成する。

  • キャンセルシグナル

    • context.WithCancel 関数でキャンセルするコンテキストを作成できる。

    • グレースフルに処理されるようにしたい場合に使える。

  • コンテキスト値

    • キーバリューのリストを運ぶことができる。

    • キーには公開されていない独自型を使って、異なるパッケージに上書きされるのを防ぐ。

  • コンテキストのキャンセルを捕捉する

    • context.Contextは、←chan struct{}を返すDoneメソッドを公開している。

    • コンテキストに関する処理をキャンセルする必要がある時にクローズされる。

    • チャネルからメッセージを受信し続けたい場合はselectを使う。

コンテキストは便利だな。まだ十分使いこなせていないな。

@mizue
Healthy Programmer