Golang/Ginフレームワーク リファレンスまとめ

# Golang/Ginフレームワーク リファレンスまとめ

探すのが面倒なので、備忘録をかねてまとめました。

## 目次

| No. | カテゴリ | 説明 |
|:---:|:---------|:-----|
| 1 | [**心得・マインド系**](#心得マインド系) | Go言語の哲学と設計思想 |
| 2 | [**参考リファレンス系**](#参考リファレンス系) | 公式ドキュメントと主要リソース |
| 3 | [**基本コマンド・文法系**](#基本コマンド文法系) | Go言語の基本的な使い方 |
| 4 | [**初期設定・環境構築系**](#初期設定環境構築系) | 開発環境のセットアップ |
| 5 | [**Ginフレームワーク基礎**](#ginフレームワーク基礎) | Ginの基本的な使い方 |
| 6 | [**プロジェクト構成・設計系**](#プロジェクト構成設計系) | アプリケーション設計とアーキテクチャ |
| 7 | [**ルーティング・ミドルウェア系**](#ルーティングミドルウェア系) | HTTPリクエストの処理 |
| 8 | [**データベース連携系**](#データベース連携系) | GORM等のORM使用法 |
| 9 | [**エラーハンドリング系**](#エラーハンドリング系) | エラー処理のベストプラクティス |
| 10 | [**テスト系**](#テスト系) | 単体テストと統合テスト |
| 11 | [**デバッグ・ログ系**](#デバッグログ系) | デバッグ手法とロギング |
| 12 | [**パフォーマンス最適化系**](#パフォーマンス最適化系) | 並行処理とメモリ管理 |
| 13 | [**セキュリティ系**](#セキュリティ系) | セキュアなアプリケーション開発 |
| 14 | [**Docker・デプロイ系**](#dockerデプロイ系) | コンテナ化とデプロイメント |
| 15 | [**よくあるエラー・トラブルシューティング**](#よくあるエラートラブルシューティング) | 頻出エラーの解決法 |

---

## 心得・マインド系

### Go言語の設計哲学
- **[The Go Programming Language Specification](https://go.dev/ref/spec)** - Go言語仕様書（公式）
- **[Effective Go](https://go.dev/doc/effective_go)** - Go言語のイディオムとベストプラクティス（公式）
- **[Go Proverbs](https://go-proverbs.github.io/)** - Rob Pikeによる設計原則
- **[Go Code Review Comments](https://go.dev/wiki/CodeReviewComments)** - コードレビューのガイドライン

### Goらしいコードの書き方
- **[Simplicity is Complicated](https://www.youtube.com/watch?v=rFejpH_tAHM)** - Rob Pikeの講演（シンプルさの重要性）

---

## 参考リファレンス系

### 公式ドキュメント
- **[Go Documentation](https://go.dev/doc/)** - Go言語公式ドキュメント
- **[Gin Web Framework]()** - Gin公式ドキュメント
- **[Go Packages](https://pkg.go.dev/)** - 標準ライブラリとサードパーティパッケージのドキュメント

### チュートリアル・ガイド
- **[A Tour of Go](https://go.dev/tour/)** - インタラクティブなGo言語チュートリアル（公式）
- **[Go by Example](https://gobyexample.com/)** - 実例で学ぶGo言語
- **[Gin Examples](https://github.com/gin-gonic/examples)** - Ginの公式サンプル集

---

## 基本コマンド・文法系

### Go言語の基本コマンド
- **[Command Documentation](https://pkg.go.dev/cmd/go)** - goコマンドの完全ガイド
- **[Go Modules Reference](https://go.dev/ref/mod)** - モジュール管理の詳細

### 基本的な文法と型システム
- **[The Go Programming Language](https://www.gopl.io/)** - 定番の教科書（書籍）
- **[Go Data Structures](https://research.swtch.com/godata)** - データ構造の内部実装

---

## 初期設定・環境構築系

### 開発環境のセットアップ
- **[Download and Install](https://go.dev/doc/install)** - Go言語のインストール（公式）
- **[Getting Started with Go](https://go.dev/doc/tutorial/getting-started)** - 初期設定ガイド
- **[VS Code Go Extension](https://github.com/golang/vscode-go)** - VS Code用の公式拡張機能

### プロジェクトの初期化
- **[Tutorial: Create a Go module](https://go.dev/doc/tutorial/create-module)** - モジュールの作成方法
- **[Gin Quick Start](https://gin-gonic.com/en/docs/quickstart/)** - Ginプロジェクトの開始方法

---

## Ginフレームワーク基礎

### 基本的な使い方
- **[Gin Introduction](https://gin-gonic.com/en/docs/introduction/)** - Ginの概要と特徴
- **[Gin Examples](https://gin-gonic.com/en/docs/examples/)** - 基本的な実装例

### リクエスト・レスポンス処理
- **[Model Binding and Validation](https://gin-gonic.com/en/docs/examples/binding-and-validation/)** - データバインディング
- **[XML/JSON/YAML/ProtoBuf rendering](https://gin-gonic.com/en/docs/examples/rendering/)** - レスポンスフォーマット

---

## プロジェクト構成・設計系

### プロジェクト構造のベストプラクティス
- **[Standard Go Project Layout](https://github.com/golang-standards/project-layout)** - 標準的なプロジェクト構造
- **[Clean Architecture in Go](https://github.com/bxcodec/go-clean-arch)** - クリーンアーキテクチャの実装例
- **[Organizing Go Code](https://go.dev/blog/organizing-go-code)** - コードの整理方法（公式ブログ）

### 設計パターン
- **[Go Patterns](https://github.com/tmrts/go-patterns)** - Go言語のデザインパターン集
- **[Uber Go Style Guide](https://github.com/uber-go/guide/blob/master/style.md)** - Uberのスタイルガイド

---

## ルーティング・ミドルウェア系

### ルーティング
- **[Gin Routing]()** - ルートグループ化
- **[RESTful API with Gin]()** - REST APIの実装

### ミドルウェア
- **[Using Middleware](https://gin-gonic.com/docs/examples/using-middleware/)** - ミドルウェアの使用方法
- **[Custom Middleware](https://gin-gonic.com/docs/examples/custom-middleware/)** - カスタムミドルウェアの作成
- **[Gin Contrib](https://github.com/gin-contrib)** - 公式ミドルウェアコレクション

---

## データベース連携系

### ORM（GORM）
- **[GORM Documentation](https://gorm.io/docs/)** - GORM公式ドキュメント
- **[GORM with Gin](https://github.com/gin-gonic/examples/tree/master/gorm)** - Gin+GORMの実装例

### データベース接続
- **[database/sql tutorial](https://go.dev/doc/tutorial/database-access)** - 標準パッケージでのDB接続（公式）
- **[SQL Database Drivers](https://github.com/golang/go/wiki/SQLDrivers)** - 各種データベースドライバ一覧

### マイグレーション
- **[GORM Migration](https://gorm.io/docs/migration.html)** - GORMのマイグレーション機能
- **[golang-migrate](https://github.com/golang-migrate/migrate)** - 汎用マイグレーションツール

---

## エラーハンドリング系

### エラー処理のベストプラクティス
- **[Error Handling in Go](https://go.dev/blog/error-handling-and-go)** - エラー処理の基本（公式ブログ）
- **[Working with Errors in Go 1.13](https://go.dev/blog/go1.13-errors)** - エラーラッピング
- **[Gin Error Management](https://gin-gonic.com/en/docs/examples/error-handling-middleware/)** - Ginでのエラー管理

### カスタムエラー
- **[errors package](https://pkg.go.dev/errors)** - 標準エラーパッケージ
- **[pkg/errors](https://github.com/pkg/errors)** - 拡張エラーハンドリングライブラリ

---

## テスト系

### 単体テスト
- **[Testing in Go](https://go.dev/doc/tutorial/add-a-test)** - テストの基本（公式チュートリアル）
- **[testing package](https://pkg.go.dev/testing)** - 標準テストパッケージ
- **[Table Driven Tests](https://go.dev/wiki/TableDrivenTests)** - テーブル駆動テスト

### Ginアプリケーションのテスト
- **[Gin Testing](https://gin-gonic.com/docs/testing/)** - Ginのテスト方法
- **[httptest package](https://pkg.go.dev/net/http/httptest)** - HTTPハンドラのテスト

### モックとテストツール
- **[testify](https://github.com/stretchr/testify)** - アサーションとモックライブラリ
- **[gomock](https://github.com/golang/mock)** - Google製モックフレームワーク

---

## デバッグ・ログ系

### デバッグツール
- **[Delve](https://github.com/go-delve/delve)** - Go言語用デバッガ
- **[pprof](https://pkg.go.dev/net/http/pprof)** - プロファイリングツール

### ロギング
- **[log package](https://pkg.go.dev/log)** - 標準ログパッケージ
- **[slog package](https://pkg.go.dev/log/slog)** - 構造化ログ（Go 1.21+）
- **[zap](https://github.com/uber-go/zap)** - 高性能ロギングライブラリ
- **[logrus](https://github.com/sirupsen/logrus)** - 構造化ログライブラリ

---

## パフォーマンス最適化系

### 並行処理
- **[Concurrency in Go](https://go.dev/doc/effective_go#concurrency)** - 並行処理の基本（公式）
- **[Go Concurrency Patterns](https://go.dev/blog/pipelines)** - 並行処理パターン
- **[Context package](https://pkg.go.dev/context)** - コンテキストによる制御

### プロファイリングと最適化
- **[Profiling Go Programs](https://go.dev/blog/pprof)** - プロファイリング手法
- **[High Performance Go Workshop](https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html)** - パフォーマンス最適化ワークショップ

---

## セキュリティ系

### セキュアコーディング
- **[Go Security](https://github.com/OWASP/Go-SCP)** - OWASPセキュアコーディングプラクティス
- **[crypto package](https://pkg.go.dev/crypto)** - 暗号化標準パッケージ

### 認証・認可
- **[JWT-Go](https://github.com/golang-jwt/jwt)** - JWT実装
- **[Gin JWT Middleware](https://github.com/appleboy/gin-jwt)** - Gin用JWT認証ミドルウェア
- **[Casbin](https://casbin.org/docs/get-started)** - 認可ライブラリ

---

## Docker・デプロイ系

### Dockerization
- **[Docker Official Images - Golang](https://hub.docker.com/_/golang)** - 公式Dockerイメージ
- **[Building Docker Images for Go](https://www.docker.com/blog/containerize-your-go-developer-environment-part-1/)** - Dockerイメージの作成

### デプロイメント
- **[Deploy Go Apps](https://go.dev/doc/tutorial/deploy)** - デプロイガイド（公式）
- **[12 Factor App with Go](https://www.12factor.net/)** - 12ファクターアプリの実践

### CI/CD
- **[GitHub Actions for Go](https://github.com/actions/setup-go)** - GitHub Actions設定
- **[Go Release Workflow](https://go.dev/doc/modules/releasing)** - リリースワークフロー

---

## よくあるエラー・トラブルシューティング

### 頻出エラーと解決法
- **[Go FAQ](https://go.dev/doc/faq)** - よくある質問と回答（公式）
- **[Common Go Mistakes](https://github.com/golang/go/wiki/CommonMistakes)** - よくある間違い
- **[50 Shades of Go](http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/)** - Go言語の落とし穴

### デバッグテクニック
- **[Debugging Go Code](https://go.dev/doc/gdb)** - GDBを使用したデバッグ
- **[Race Detector](https://go.dev/doc/articles/race_detector)** - データ競合の検出

---

## まとめ

このリファレンス集は、Go言語とGinフレームワークを使用した開発において必要となる主要な情報源をカテゴリ別に整理したものです。

### 学習の進め方

1. **基礎固め**: まず「A Tour of Go」と「Effective Go」で言語の基本を理解
2. **実践的な学習**: Ginの公式ドキュメントとサンプルで実装方法を習得
3. **設計・アーキテクチャ**: プロジェクト構成のベストプラクティスを学習
4. **品質向上**: テスト、デバッグ、パフォーマンス最適化の手法を身につける

### 特徴的な点

- **シンプルさ重視**: Go言語は意図的にシンプルに設計されており、言語機能は最小限
- **並行処理**: goroutineとchannelによる強力な並行処理サポート
- **高速なコンパイル**: 大規模プロジェクトでも高速にビルド可能
- **標準ライブラリの充実**: 多くの機能が標準パッケージで提供される