April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
「Webアプリケーションで一定時間内にレスポンスを返せなかった」「長い時間のかかるバッチ処理用のクエリーを発行したが処理が終わらない」など、クエリーをキャンセルしたい場面がいくつかあります。クエリーをキャンセルするには、コンテキストを使うのが一般的です。
Go 1.8 から database/sql パッケージがコンテキストに対応しました。クエリーをタイムアウトしてキャンセルしたい場合などは、 context.WithCancel() や context.WithTimeout() を使用してキャンセルするのが良いでしょう。ただし使用しているデータベースのドライバーがクエリーのキャンセルをサポートしている必要があります。

クエリーのキャンセルを試みるときは、使用しているデータベースドライバーがキャンセルをサポートしているか確認が必要です。
たとえば一昔に主流だったPostgreSQLドライバーである lib/pg では、クエリーがキャンセルできない、という以下のようなIssueがあります。
context.WithTimeout でクエリーをキャンセル ctx, cancel := context.WithTimeout(context.Background(), 5Read now
Unlock full access