August 2025
Beginner to intermediate
552 pages
7h 58m
Japanese
「12章 並行処理」で、ゴルーチンのタイムアウト(制限時間のオーバー)の処理に「コンテキスト」を用いました。このように処理の対象となるデータではなく、メタデータ(処理自体に関する情報)を、APIの境界を超えてやり取りしたり、プロセス間でやり取りしたりするのにコンテキストが用いられます。こうしたメタデータは、大きく分けて次の2つに分類されます。
多くの言語では、この種の情報を記憶するためにスレッドローカル変数を使い、データをOSで実行中の特定のスレッドと結びつけています。この方法はGoでは使えません。ゴルーチンは一意に決まるIDをもっていないのです。そして、こちらのほうがより重要かと思いますが、スレッドローカル変数はあるところで設定され、また別のところで何の前触れもなく突然現れる「魔法」のように感じられるのです。
Goではコンテキスト(context)という概念を使ってリクエストのメタデータにまつわる問題を解決しています。この章でコンテキストをどのように使えばよいのか見ていきましょう。
Go言語においてコンテキストとは、単に、パッケージcontextで次のように定義されたインタフェースContextを満たすインスタンスのことです。
typeContextinterface{// 以下の4つのメソッドをもてばコンテキストDeadline()(deadlinetime ...
Read now
Unlock full access