全书目录

第三十二篇:Gin 完全指南 —— 高速交警中枢宇宙

第五章:路由 —— 先决定每辆车往哪个分流口走

1 分钟 165 字 第 596 / 962 个阅读单元

Gin 的路由就是给不同请求登记不同处理入口。

go
r.GET("/checkpoints", listCheckpoints)
r.GET("/checkpoints/:id", getCheckpoint)
r.POST("/tickets", createTicket)
r.PUT("/tickets/:id", updateTicket)
r.DELETE("/tickets/:id", deleteTicket)

这可以翻译成:

text
高速交警中枢
├── GET    /checkpoints      -> 查看所有卡口
├── GET    /checkpoints/:id  -> 查看单个卡口
├── POST   /tickets          -> 新开处罚单
├── PUT    /tickets/:id      -> 修改处罚单
└── DELETE /tickets/:id      -> 删除处罚单
#1. 路径参数:车牌号、卡口编号这种“路口自带编号”
go
r.GET("/vehicles/:plate", func(c *gin.Context) {
    plate := c.Param("plate")
    c.JSON(http.StatusOK, gin.H{"plate": plate})
})

访问:

text
/vehicles/A12345

得到:

json
{"plate":"A12345"}
#2. 查询参数:车上临时带来的筛查条件
go
r.GET("/tickets", func(c *gin.Context) {
    status := c.DefaultQuery("status", "open")
    officer := c.Query("officer")

    c.JSON(http.StatusOK, gin.H{
        "status":  status,
        "officer": officer,
    })
})

访问:

text
/tickets?status=closed&officer=zhangsan
#3. 通配路径:后面整段都归这条线路处理
go
r.GET("/camera/:id/*action", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "id":     c.Param("id"),
        "action": c.Param("action"),
    })
})

比如:

text
/camera/17/reboot
/camera/17/config/night-mode
#4. 路由的核心心智
text
路由 = HTTP 方法 + URL 路径 + 处理函数

不是“URL 长得像就行”,而是:

什么车,从哪个入口进来,交给哪个执勤台。