ユーザーアイコン

mizuko

2日前

0
0

Go言語でクエリパラメータの変換処理を共通化するQueryParserパターン

Go
Gin

Gin フレームワークで複数のクエリパラメータを扱う際、各パラメータごとに変換とエラーハンドリングを書くとコードが冗長になる。QueryParser構造体を使用することで、この処理を効率的に共通化できる。

QueryParserの実装方法:

type QueryParser struct { c *gin.Context errors []error // エラーを蓄積 } func NewQueryParser(c *gin.Context) *QueryParser { return &QueryParser{c: c, errors: []error{}} } // 各型に対応したパースメソッドを用意 func (p *QueryParser) ParseUint(key string) *uint func (p *QueryParser) ParseInt(key string) *int func (p *QueryParser) ParseDate(key string, layout string) *time.Time func (p *QueryParser) ParseBool(key string) *bool func (p *QueryParser) ParseString(key string) *string func (p *QueryParser) ParseUintArray(key string) []uint // エラーハンドリング func (p *QueryParser) HandleErrors(c *gin.Context) bool { if p.HasErrors() { HandleBadRequest(c, p.GetError()) return true } return false }

使用例:

parser := helper.NewQueryParser(c) userID := parser.ParseUint("user_id") date := parser.ParseDate("date", "2006-01-02") page := parser.ParseInt("page") limit := parser.ParseInt("limit") // 一括エラーチェック if parser.HandleErrors(c) { return }

メリット:

  1. エラーハンドリングの集約 - 複数のパラメータのエラーを一括処理
  2. コードの簡潔性 - 個別のエラーチェックが不要
  3. 保守性の向上 - 新しい型の追加が容易
  4. 型安全性 - 各型に対応したメソッドで明示的に変換

注意点:

  • HandleErrorsメソッドは明示的に呼び出す必要がある(Goの設計思想に沿った明示的なエラーハンドリング)
  • エラーは蓄積されるため、全てのパース処理後にチェックすることで効率的