Go Development Patterns
必要なワークフロー
レビュー時は関連スキルを呼び出すこと: security-audit(OWASP)、enterprise-readiness(OpenSSF/SLSA)、github-project(ブランチ保護)。すべて必須です。
コア原則
型安全性
- 避けるべきこと:
interface{}(代わりにanyを使用)、sync.Map、散在する型アサーション、リフレクション - 推奨: ジェネリクス
[T any]、errors.AsType[T](Go 1.26)、具象型 - アップグレード後は
go fix ./...を実行する
一貫性
- 問題領域ごとに1つのパターン
- 既存のコードベースパターンに合わせる
- 全体的にリファクタリングするか、まったく行わない
- 設定の優先順位:デフォルト < 設定ファイル < 環境変数 < フラグ
テスト
- ビルドタグでテスト階層を分離:ユニット(デフォルト)、
integration、e2e - 常に
t.Parallel()、t.Helper()、テーブル駆動サブテストを使用 log/slogを直接使用し、カスタムLoggerインターフェースでラップしない
規約
- エラー:小文字、句読点なし(
errors.New("invalid input")) - 命名:ID、URL、HTTP(Id、Url、Http ではなく)
- エラーラッピング:
fmt.Errorf("failed to process: %w", err)
参考文献
Gitフック:ls lefthook.yml 2>/dev/null && lefthook install || echo "Add lefthook — see references/lefthook-template.md"
必要に応じて参照:
| 参照先 | 目的 |
|---|---|
references/architecture.md | パッケージ構造、設定管理、ミドルウェアチェイン |
references/logging.md | log/slog を使用した構造化ロギング、logrus からの移行 |
references/cron-scheduling.md | go-cron パターン:名前付きジョブ、実行時更新、コンテキスト、耐久性 |
references/resilience.md | リトライロジック、グレースフルシャットダウン、コンテキスト伝播 |
references/docker.md | Docker クライアントパターン、バッファプーリング |
references/ldap.md | LDAP/Active Directory 統合 |
references/testing.md | テスト戦略、ビルドタグ、テーブル駆動テスト |
references/linting.md | golangci-lint v2、staticcheck、コード品質 |
references/api-design.md | ビットマスクオプション、関数型オプション、ビルダー |
references/fuzz-testing.md | Go ファジングパターン、セキュリティシード |
references/contracts-and-invariants.md | 契約、不変条件、プロパティテスト |
references/mutation-testing.md | Gremlins 設定、テスト品質測定 |
references/makefile.md | CI/CD のための標準 Makefile インターフェース |
references/modernization.md | Go 1.26 モダナイザー、go fix、errors.AsType[T]、wg.Go() |
references/lefthook-template.md | Go プロジェクトの Git フック用、すぐに使える lefthook.yml |
references/reusable-workflows.md | 再利用可能な Actions ワークフロー呼び出し元、権限伝播、リリースゲート出力 |
references/single-build-release.md | 単一ビルドリリース:一度クロスコンパイルし、リリースとコンテナで再利用 |
references/awesome-go-submission.md | awesome-go 投稿:CIで解析されるPR本文、エントリ形式、名前の衝突 |
品質ゲート
レビュー完了前に以下を実行:
golangci-lint run --timeout 5m # リンティング
go vet ./... # 静的解析
staticcheck ./... # 追加チェック
govulncheck ./... # 脆弱性スキャン
go test -race ./... # 競合検出
標準ライブラリの脆弱性修正
govulncheck が標準ライブラリの脆弱性を報告した場合:vuln.go.dev で修正バージョンを確認し、go.mod の go X.Y.Z を更新し、go mod tidy を実行します。ブランチ保護が有効なリポジトリではPRブランチを使用してください。
貢献: https://github.com/netresearch/go-development-skill に改善案を送信してください