Goにおける並行性の制御:errgroup、ワーカープールの活用とバックプレッシャー
単にキャンセルするだけでなく、進行中の作業の上限を設けてください。
Goにおける非同期処理のデフォルトの失敗モードは、無制限のファンアウト(Forking)です。goステートメントの1つごとに処理中のタスクが1つ増え、上限も管理する主体もありません。この記事では、その両方(上限と管理主体)を与える方法について説明します。
単にキャンセルするだけでなく、進行中の作業の上限を設けてください。
Goにおける非同期処理のデフォルトの失敗モードは、無制限のファンアウト(Forking)です。goステートメントの1つごとに処理中のタスクが1つ増え、上限も管理する主体もありません。この記事では、その両方(上限と管理主体)を与える方法について説明します。
5つのGo HTTPスタック、1つのベンチマーク環境、実測数値。
Goの標準ライブラリには本番環境で利用できるHTTPサーバーが含まれており、Go 1.22以降は組み込みルーターがメソッドマッチングとパスパラメータを独自に処理します。フレームワークに関する問いは消え去ったわけではなく、むしろより狭い範囲に絞られています。
AIエージェントが仕様、テスト、コードから逸脱するのを防ぎましょう。
AIコーディングエージェントは機能を迅速に提供しますが、仕様書、テスト、コードは静かに乖離していきます。このガイドでは、トレーサビリティモデル、仕様からテストおよびコードへのマッピング、そしてマージ前に乖離を検知するCIチェックについて解説します。
メッセージのポイズニングによるキューのブロックを防止する
デッドレターキュー(DLQ)は、コンシューマーが処理できないメッセージを捕捉する安全ネットです。これにより、1つの破損したペイロードがキュー内のその後のすべてのメッセージをブロックしたり、静かにドロップしたりすることが防がれます。
Goマイクロサービスにおけるカスケード障害を防止する
サーキットブレーカーは、Goのサービスが故障した依存先に対して過剰な呼び出しを行うことを防ぎ、goroutine、ソケット、メモリを消費してシステム全体が崩壊するまでカスケード障害(連鎖障害)を引き起こすのを防ぎます。
「意図から検証済みコードまでの5つのフェーズ」
仕様駆動開発(SDD)が機能するのは、仕様が単にキックオフ後に棚上げされる文書ではなく、ワークフローそのものである場合です。目的は、膨大な製品要件定義書を作成することではありません。
イベントとデータを合わせて記載してください。分割しないでください。
同時に成功すべき2つの書き込みが、最終的にはそれぞれ個別に失敗する可能性があります。
あなたの注文サービスは、データベースに注文を保存し、次にメッセージブローカーに order.created イベントを公開します。
Goのcontextはストレージではなく、制御フローです。
Goのcontext.Contextは、誤用しやすいほど単純です。そして、それこそが問題なのです。
仕様を唯一の信頼できる情報源とし、付属文書としない。
仕様駆動開発(Spec-Driven Development)は、ソフトウェアエンジニアが以前から模索してきたものの、その労力に見合う成果が得られなくなった際に棚上げされてきたアイデアの一つです。
意図をコードに近づけよう。
意思決定記録は、AI支援ソフトウェア開発における欠けている記憶レイヤーです。何を構築したかだけでなく、なぜそうしたかを取締ります — この区別は、AIツールがコードを書いている場合に極めて重要になります。
適切な境界でエラーを処理する。
Goのエラーハンドリングは、批判されやすいものです。 Go開発者は誰でも、このコードを数百回書いてきたでしょう:
並行Goテストでスリープ処理に頼るのをやめましょう
Goの並行コードのテストには、これまで少しの規律が必要でした。 ゴルーチンは軽量で、チャネルはシンプル、コンテキストのキャンセルは慣用的です——バックグラウンドワーカーとタイマーは、実世界のGoサービスにどこにでもあります。
不要な形式主義を排して、GoでCQRSを構築する
CQRS(コマンドとクエリの責務分離)は、過大宣伝され、複雑化され、単なるCRUD(Create, Read, Update, Delete)の退屈さを解消するための万能薬と誤解されがちないくつかのパターンの一つです。
重複する副作用を回避する
分散システムにおける冪等性(Idempotency)とは、ネットワークが嘘をつき、キューが再送を試み、クライアントがパニックし、オペレーターがリプレイボタンを押した際に、あなたを救済する性質です。本番環境では、重複したメッセージの配信は正常な挙動です。問題となるのは、重複した副作用の発生です。
Slack はワークフロー UI およびアラート配信レイヤーです。
Slack の統合は、1 つの HTTP コールでメッセージを送信できるため、欺瞞的に簡単に見えるかもしれません。 しかし、Slack を対話的で信頼性の高いものにする必要が出てきた時が、本物の面白い部分です。
Discord を安全でインタラクティブなアラートバスに変えましょう。
Discord をシステムとして扱う場合、イベントを公開する場所、人間が意思決定を行い、自動化がワークフローを継続させる場として扱うことで、本格的な統合の土台となります。