AdSense

網頁

2021/7/31

Golang Gin Grouping routes 範例

Go Gin設計應用程式的REST API可使用RouterGroup.Group()做路徑分組。


範例

範例環境:

  • Go 1.16
  • Gin 1.7.2

例如下面在/demo下分為/v1/v2,下面又有各自的/hello/hi

package main

import "github.com/gin-gonic/gin"

func main() {
    router := gin.Default()

    demo := router.Group("/demo")

    v1 := demo.Group("/v1")
    v1.GET("/hello", func(c *gin.Context) {
        c.JSON(200, "Hello - v1")
    })
    v1.GET("/hi", func(c *gin.Context) {
        c.JSON(200, "Hi - v1")
    })

    v2 := demo.Group("/v2")
    v2.GET("/hello", func(c *gin.Context) {
        c.JSON(200, "Hello - v2")
    })
    v2.GET("/hi", func(c *gin.Context) {
        c.JSON(200, "Hi - v2")
    })

    router.Run()
}

使用cURL測試上面每個end point。

$ curl "http://localhost:8080/demo/v1/hello"
"Hello - v1"

$ curl "http://localhost:8080/demo/v1/hi"
"Hi - v1

$ curl "http://localhost:8080/demo/v2/hello"
"Hello - v2"

$ curl "http://localhost:8080/demo/v2/hi"
"Hi - v2"

因為RouterGroup.Group()回傳的還是RouterGroup,且RouterGroup實作IRoutes介面且RouterGroup.GET()回傳的還是IRoutes,所以也能改用下面fluent的風格寫法。

package main

import "github.com/gin-gonic/gin"

func main() {
    router := gin.Default()

    demo := router.Group("/demo")

    demo.Group("/v1").
        GET("/hello", func(c *gin.Context) {
            c.JSON(200, "Hello - v1")
        }).
        GET("/hi", func(c *gin.Context) {
            c.JSON(200, "Hi - v1")
        })

    demo.Group("/v2").
        GET("/hello", func(c *gin.Context) {
            c.JSON(200, "Hello - v2")
        }).
        GET("/hi", func(c *gin.Context) {
            c.JSON(200, "Hi - v2")
        })

    router.Run()
}

參考github


沒有留言:

AdSense