mcpField
G
go-best-practices

go-best-practices

github.com/poteto開発571214 回インストール32 週間前に更新
リポジトリ

go-best-practices について

Go 開発者向けに、プログラム構成、並行処理、設定、テスト、ログ、リンターの実践ルールをまとめたスキルです。コード例を含む参照資料も案内します。

主な機能

  1. 01最小限の main と共通初期化
  2. 02順序付き終了と非ブロッキング配信
  3. 03決定的な並行処理・リークテスト
  4. 04階層型設定とプラットフォーム別パス
  5. 05デバッグログの秘密情報マスキング
  6. 06ゴールデンテストと厳選リンター

活用シーン

  1. 01新しい Go バイナリの構成
  2. 02長時間稼働サービスの終了管理
  3. 03goroutine とチャネル動作のテスト
  4. 04複数ソースの設定優先順位の決定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/poteto/noodle --skill go-best-practices

インストール後、Claude Code で/go-best-practicesを入力して読み込まれたか確認します。

同梱ファイルreferences/patterns.md

詳細

Go のベストプラクティス

パターン適用する場面
最小限の main新しいバイナリ
単一のブートストラップモード間でのアプリケーションの配線
順序を考慮したシャットダウン長時間実行されるプロセス
ノンブロッキングのファンアウトチャネルベースのイベントシステム
並行処理のテストgoroutine を使うコード全般
階層化された設定複数ソースからの設定
クロスプラットフォーム対応のパスファイル/設定パスの解決
安全なデバッグログHTTP クライアントの計装
ゴールデンテストのマトリクスレンダリング/出力コンポーネント
焦点を絞ったリンターCI パイプラインの設定

コード例については、references/patterns.md を参照してください。

ルール

  1. main.go はスタブにします。 cmd.Execute() を呼び出し、それ以外は何もしません。診断機能(pprof)は環境変数で有効化します。

  2. ブートストラップ経路は 1 つにします。 すべてのモード(対話型、ヘッドレス、テスト)で同じ初期化関数を共有します。経路が 2 つあると、実装にずれが生じます。

  3. 順序を考慮してシャットダウンします。 依存先より先に依存元をキャンセルし、その後、独立したクリーンアップをタイムアウト付きコンテキストのもとで並列実行します。並列フェーズでは WaitGroup を使用して待機します。

  4. 送信側をブロックしてはいけません。 明示的な破棄ポリシーを設け、チャネルへの送信はノンブロッキングにします。破棄はデバッグレベルでログに記録します。ポリシーを文書化してください。

  5. 並行処理は仕組みを使ってテストします。 タイミングの決定性には testing/synctest を、リークの検出には goleak.VerifyNone を使用し、タイマー/チャネルのデッドロックには専用のリグレッションテストを用意します。

  6. 設定の優先順位を明示します。 グローバル → プロジェクト → フラグの順にします。CWD から上位へたどってプロジェクト設定を見つけ、逆順にして最も近い設定を優先し、ディープマージします。

  7. プラットフォームパスを一元管理します。 用途ごとに関数を 1 つ設けます。解決順序は、環境変数による上書き → XDG → プラットフォームのデフォルト → フォールバックです。

  8. デバッグログではシークレットをマスキングします。 http.RoundTripper をラップします。authorization、api-key、token、secret に一致するヘッダーをフィルタリングします。本番環境での割り当てを避けるため、デバッグレベルの場合のみ有効にします。

  9. マトリクスにはゴールデンテストを使用します。 複数の軸(レイアウト × テーマ × サイズ)を、並列サブテストとして組み合わせます。連続する範囲を網羅して、オフバイワンのバグを検出します。

  10. すべてのリンターではなく、焦点を絞ったリンターを使います。 実際のバグを検出するもの(bodyclose、noctx、tparallel)を有効にします。ノイズの多いデフォルトは無効にします。プロジェクト固有のチェックはスクリプトとして追加します。テストでは常に -race を使用します。

コメント