【Go】Echoのルーティングをグループ化してミドルウェアを設定する

はじめに

Echoでルーティングをグループ化して、それに対してミドルウェアを追加するのにはどうやってやるのだろうと疑問に思ったので、調べてみました。

コード

まず、/admin以下をグループ化するために、g := e.Group(“/admin”) を追加。

またさらにadminの中でもグループ化したい場合は、g2 := g.Group(“/users”)と書く。

そして、グループ化の宣言の後にミドルウェアを追加してやる。

package main

import (
	"log"

	"github.com/labstack/echo/v4"
)

func main() {
	e := echo.New()

	e.GET("/", func(c echo.Context) error {
		return c.String(200, "Hello, World!")
	})

	g := e.Group("/admin")
	// ログミドルウェアを追加
	g.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			log.Printf("Admin Middleware")
			return next(c)
		}
	})
	g.GET("/dashboard", func(c echo.Context) error {
		return c.String(200, "Admin Dashboard")
	})
	g.GET("/settings", func(c echo.Context) error {
		return c.String(200, "Admin Settings")
	})

	g2 := g.Group("/users")
	// ログミドルウェアを追加
	g2.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			log.Printf("Admin Users Middleware")
			return next(c)
		}
	})
	g2.GET("/list", func(c echo.Context) error {
		return c.String(200, "User List")
	})
	g2.GET("/create", func(c echo.Context) error {
		return c.String(200, "User Create")
	})

	e.Logger.Fatal(e.Start(":8080"))
}

動かしてみる

curl http://localhost:8080/admin/dashboard

Admin Dashboard%
2024/07/12 10:08:28 Admin Middleware

users以下にアクセスすると、adminとusersの両方のミドルウェアが適用される。

curl http://localhost:8080/admin/users/list

Admin Users List%
2024/07/12 10:10:22 Admin Middleware
2024/07/12 10:10:22 Admin Users Middleware