𝗚𝗼 𝗖𝗼𝗻𝘁𝗲𝘅𝘁 𝗣𝗮𝗰𝗸𝗮𝗴𝗲

多くのGo開発者は、context.Context を十分に理解せずに使用しています。HTTPハンドラー、データベース呼び出し、SDKのメソッドなどでよく目にします。初心者の多くは、どこにでも context.Background() を渡してしまいがちです。

この間違いは問題を引き起こします。Lambda関数がタイムアウトを超えてハングアップしたり、ユーザーが切断した後もデータベースクエリが実行され続けたりすることがあります。

Contextを使用すると、コードを通じてキャンセル信号やデッドライン(期限)を送信できます。これにより、次の3つの問いに答えることができます。

• この操作を継続すべきか? • この操作はいつまでに終了しなければならないか? • この呼び出しと共にどのようなリクエストデータが流れるか?

Context インターフェースには4つのメソッドがあります。

Contextはツリー構造として機能します。親コンテキストから開始し、子コンテキストを作成していきます。

ルートコンテキスト:

子コンテキスト:

重要なルール: 必ず cancel 関数を呼び出してください。子コンテキストを作成したら、すぐに defer cancel() を使用します。これを怠ると、メモリリークの原因になります。

ベストプラクティス:

親コンテキストがキャンセルされると、そのすべての子コンテキストも自動的にキャンセルされます。これにより、システム全体の操作チェーン全体を簡単に停止させることができます。

出典: https://dev.to/ferztyle/go-context-package-37nk