Go + Ginでmiddlewareの仕組みを作る
Go
Gin
バックエンド
知識
ディレクトリ構成については、こちらに記載。
adapter/http/middlewareに以下の様なmiddlewareの処理を実装
errorhandler.go
go
package middleware
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"hoge/logger"
)
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
logger.Error("Panic: %v", fmt.Errorf("unknown panic: %v", err))
// カスタムエラーレスポンスを返す
c.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": "Internal Server Error",
})
c.Abort()
}
}()
c.Next()
}
}adapter/http/router/router.go
go
~ 略 ~
func (r *Router) SetupRoutes(e *gin.Engine) {
e.Use(middleware.ErrorHandler())
~ 略 ~