Go Conference

Room A

Intermediate

20 mins.

Goはgoroutineによる並行処理を容易に実現できます。しかし、その並行処理の終了処理は開発者に委ねられています。 処理をただ停止するだけでは済まない場合も多く、適切な終了処理、つまり「クリーンアップ」が必要です。

クリーンアップには、例えば次のようなものがあります。

  • トランザクション処理: 中途停止するとデータ整合性が失われるため、最後まで完了させる必要がある。
  • 外部リソースとの接続: 正常に終了させて、リソース解放や接続解除を行う必要がある。
  • 一時ファイルやデータ: 処理終了後に不要になるため、削除する必要がある。

いわゆる「グレースフルシャットダウン」と「通常のシャットダウン」の違いは、クリーンアップ処理の有無にあると考えています。

本発表では、まず「クリーンアップ」をユースケースの1つに持つ標準パッケージの機能の testing.T.Cleanupcontext.AfterFunchttp.Server.RegisterOnShutdown などを改めてみていきます。

さらに、より複雑なコードベースを持つアプリケーションにおけるクリーンアップ処理について考察します。 必要な要件をあげ、そしてその要件を満たす具体的な実装を提案します。

本発表を通じて、開発者の方々にクリーンアップ処理について改めて考えてもらい、各開発現場にあるであろうクリーンアップ処理についてGoコミュニティで会話がされることを期待しています。

Ken'ichirou Oyama

Ken'ichirou Oyama

GMOペパボ株式会社 技術部技術基盤チーム プリンシパルエンジニア

少し実用的で小さなOSSを書くのが趣味。