HTTP
Go 標準ライブラリ net/http パッケージリファレンス。
HTTP Server - Before 1.22 vs After 1.22
HTTP Functions 比較
| Feature | http.HandlerFunc | http.HandleFunc | http.Handler | http.Handle |
|---|---|---|---|---|
| Type | Function type | Function | Interface | Function |
| Main use | 関数を Handler に変換 | handler 関数を登録 | handler インターフェースを定義 | handler を登録 |
| Implementation | ServeHTTP メソッドを実装 | http.Handle を呼び出す | ServeHTTP メソッドを実装 | 直接使用 |
| Parameters | func(ResponseWriter, *Request) | pattern, func(ResponseWriter, *Request) | - | pattern, Handler |
| Common use cases | ミドルウェア、型変換 | シンプルなルートの素早い登録 | カスタム複雑ハンドラ | 任意の Handler 実装を登録 |
| Flexibility | 高い | 中 | 高い | 高い |
| Direct API endpoint registration | No | Yes | No | Yes |
| Customizable logic | Yes | Yes | Yes | Yes |
Use Cases
Links
Global Middleware が必要な場合、
Handlerを使用Router Level - Middleware が必要な場合、
HandlerFuncを使用シンプルなルート処理は、
HandleFuncを直接使用
Handler インターフェース
struct で Handler インターフェースを実装:
type UserHandler struct {
db *sql.DB // データベース接続
cache *redis.Client // Redis クライアント
apiKey string // API キー
userCount int // ユーザーカウンター
}適用場面
- 設定を保持する必要がある(データベース接続、キャッシュクライアントなど)
- 状態を共有する必要がある(カウンター、キャッシュなど)
- 依存性注入が必要
- 複雑な内部状態を維持する必要がある
Middleware Chain
- ロギングミドルウェア
- 認証チェックミドルウェア
- 新しいミドルウェアを簡単に追加可能
API Router Group
- 統一されたパスプレフィックス
- 統一されたミドルウェア適用
- 簡略化されたルート登録
HandlerFunc 型
関数型で、自動的に Handler インターフェースを実装。
http.HandleFunc("/api/health", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "OK")
})適用場面
- シンプルなリクエスト処理
- ステートレスな操作
- 単一責任のエンドポイント
- 共有リソースが不要
HandleFunc メソッド
- 通常の関数を Handler に変換
- ルートレベルのミドルウェアを実装
- Handler の実装を簡略化