スキル go-concurrency-patterns
📦

go-concurrency-patterns

安全

Go 並行処理パターンをマスターする

こちらからも入手できます: wshobson

並行処理を行う Go アプリケーションを自信を持って構築しましょう。レースコンディションやリソースリークを回避するための、ゴルーチン、チャネル、ワーカープール、グレースフルシャットダウンの本番環境対応パターンを学びます。

対応: Claude Codex Code(CC)
🥉 75 ブロンズ
1

スキルZIPをダウンロード

2

Claudeでアップロード

設定 → 機能 → スキル → スキルをアップロードへ移動

3

オンにして利用開始

テストする

「go-concurrency-patterns」を使用しています。 3 つのワーカーを持つワーカープールを作成し、チャネルからジョブを処理する

期待される結果:

これは 3 つのワーカーを持つワーカープール実装で、ジョブを並行処理し、sync.WaitGroup を使用した適切な同期処理により結果チャネルを通じて結果を収集します。

「go-concurrency-patterns」を使用しています。 並行 HTTP リクエストに errgroup を使用する方法を示す

期待される結果:

この例は golang.org/x/sync/errgroup を使用して複数の URL を並行取得する方法を示しており、最初のエラーが発生するとコンテキスト伝播を通じて保留中のすべてのリクエストをキャンセルします。

「go-concurrency-patterns」を使用しています。 並行操作を制限するためのセマフォを実装する

期待される結果:

2 つのセマフォアプローチを提供します:golang.org/x/sync/semaphore.Weighted を使用した重み付きセマフォと、シンプルなレート制限のためのチャネルベースの struct{} セマフォです。

セキュリティ監査

安全
v1 • 2/25/2026

All 44 static analysis findings are false positives from markdown-enclosed Go code examples. The skill contains legitimate educational content about Go concurrency patterns with no executable code or security risks.

2
スキャンされたファイル
691
解析された行数
0
検出結果
1
総監査数
セキュリティ問題は見つかりませんでした
監査者: claude

品質スコア

38
アーキテクチャ
100
保守性
87
コンテンツ
50
コミュニティ
100
セキュリティ
100
仕様準拠

作れるもの

並行マイクロサービスの構築

ワーカープールを備えたスケーラブルな Go サービスを作成し、リソースを効率的に管理しながら複数のリクエストを並行して処理します

データ処理パイプラインの実装

適切なエラーハンドリングとキャンセル機能を備え、大規模データセットを並列処理するためのファンアウト/ファンインパイプラインを設計します

レースコンディションのデバッグ

適切な同期パターンとレース検出ツールを使用して、既存の Go コードの並行処理バグを特定し修正します

これらのプロンプトを試す

基本的なワーカープールの作成
5 つの並行ワーカーで 100 のジョブを処理する Go のワーカープールを作成する方法を示してください
グレースフルシャットダウンの実装
SIGTERM シグナルを処理し、処理中のリクエストの完了を待機するグレースフルシャットダウンを備えた Go サーバーを作成してください
ファンアウトパイプラインの構築
3 つのステージで各ステージあたり 5 つのワーカーを持つ Go のファンアウト/ファンインパイプラインを作成してください
ゴルーチンリークの修正
この Go コードを確認して潜在的なゴルーチンリークを特定し、コンテキストキャンセルを使用して修正する方法を示してください

ベストプラクティス

  • 並行操作ではキャンセルとデッドラインのために常に context.Context を使用する
  • パニックを回避するためにチャネルは送信側からのみクローズする
  • ゴルーチン間の通信用にミューテックスよりもチャネルを優先する
  • sync.WaitGroup または errgroup を使用してゴルーチンの完了を待機する

回避

  • チャネルや WaitGroup などの適切なプリミティブの代わりに time.Sleep を同期処理に使用する
  • 受信側からチャネルをクローズしてパニックを引き起こす
  • ctx.Done() のチェックを忘れ、ゴルーチンリークにつながる
  • 適切な同期処理なしにゴルーチン間でメモリを共有する

よくある質問

Go における並行プログラミングと並列プログラミングの違いは何ですか?
並行処理は複数のタスクを同時に処理するようにプログラムを構造化することであり、並列処理は複数の CPU コアで複数のタスクを同時に実行することです。Go のゴルーチンは並行処理を可能にし、Go ランタイムはこれを並列実行できます。
チャネルとミューテックスはいつ使用すべきですか?
ゴルーチンが通信または調整を行う必要がある場合はチャネルを使用します(通信によるメモリ共有)。共有状態への並行アクセスを保護する必要がある場合はミューテックスを使用します(メモリ共有による共有)。チャネルは一般的に Go でより慣用的です。
ゴルーチンリークを防止するにはどうすればよいですか?
コンテキストキャンセルを使用し、ループ内で ctx.Done() をチェックし、チャネルが最終的にクローズされることを確認し、errgroup などの自動的にクリーンアップを処理するパターンを使用することで、ゴルーチンの出口パスを常に提供してください。
sync.WaitGroup の目的は何ですか?
sync.WaitGroup を使用すると、ゴルーチンのコレクションの完了を待機できます。Add() でカウンターを増やし、ゴルーチンが完了したら Done() で減らし、カウンターがゼロになるまで Wait() でブロックします。
Go コードでレースコンディションを検出するにはどうすればよいですか?
'go test -race ./...' または 'go run -race main.go' を使用してレース検出器を有効にしてテストまたはバイナリを実行します。レース検出器はメモリアクセスを監視し、同期処理なしの共有メモリへの並行読み取り/書き込みを報告します。
バッファチャネルとノンバッファチャネルの違いは何ですか?
ノンバッファチャネル (make(chan T)) は送信側と受信側が同時に準備されている必要があり、同期処理を提供します。バッファチャネル (make(chan T, n)) は受信側なしで最大 n 個の値を保持でき、バッファがいっぱいになるまで送信側が進行できます。

開発者の詳細

ファイル構成