Gin 框架之路由篇 - 路由参数

路由参数

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

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

    // 解析路径参数
    // $ curl http://localhost:8080/user/abel/boy
    r.Any("/user/:name/:sex", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "method": c.Request.Method,
            "name":   c.Param("name"),
            "sex":    c.Param("sex"),
            "params": c.Params,
        })
    })

    // 获取Query参数
    // $ curl "http://localhost:8080/user?name=abel&sex=girl"
    r.Any("/user", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "method": c.Request.Method,
            "name":   c.Query("name"),
            "sex":    c.DefaultQuery("sex", "boy"), // 默认值
        })
    })

    // 获取POST参数
    // $ curl http://localhost:8080/user  -X POST -d '{"name":"abel","sex":"girl"}'
    r.POST("/form", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "method": c.Request.Method,
            "name":   c.PostForm("name"),
            "sex":    c.DefaultPostForm("sex", "boy"), // 默认值
        })
    })

    // 获取Map参数(字典参数)
    // $ curl -g "http://localhost:8080/map?ids[Jack]=001&ids[Tom]=002" -X POST -d 'names[a]=Sam&names[b]=David'
    r.POST("/map", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "ids":   c.QueryMap("ids"),
            "names": c.PostFormMap("names"),
        })
    })

    // 获取Array参数(字典参数)
    // $ curl -g "http://localhost:8080/array?name=blog&name=wechat" -X POST -d 'names=Sam&names=David'
    r.POST("/array", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "name":  c.QueryArray("name"),
            "names": c.PostFormArray("names"),
        })
    })

    err := r.Run() // 监听并在 0.0.0.0:8080 上启动服务
    if err != nil {
        fmt.Println("r.Run():", err.Error())
    }
}