路由基础

路由就是“请求地址和处理函数的对应关系”。

例如:

GET /users -> 查询用户列表
POST /users -> 创建用户
GET /users/1 -> 查询 ID 为 1 的用户

一、常见 HTTP 方法

Gin 使用方法名注册路由:

router.GET("/users", listUsers)
router.POST("/users", createUser)
router.PUT("/users/:id", updateUser)
router.DELETE("/users/:id", deleteUser)

处理函数:

func listUsers(c *gin.Context) {
	c.JSON(200, gin.H{"message": "用户列表"})
}

二、REST 风格接口

常见写法:

方法路径作用
GET/users查询列表
GET/users/:id查询详情
POST/users新增
PUT/users/:id全量更新
PATCH/users/:id局部更新
DELETE/users/:id删除

示例:

router.GET("/users", func(c *gin.Context) {
	c.JSON(200, gin.H{"data": []string{"张三", "李四"}})
})

router.GET("/users/:id", func(c *gin.Context) {
	id := c.Param("id")
	c.JSON(200, gin.H{"id": id})
})

三、把处理函数拆出去

初学可以把函数写在 main.go,但不要所有逻辑都塞进匿名函数。

func listUsers(c *gin.Context) {
	c.JSON(200, gin.H{
		"data": []string{"张三", "李四"},
	})
}

func main() {
	router := gin.Default()
	router.GET("/users", listUsers)
	router.Run(":8080")
}

这样代码更清楚,也方便后面拆分 handler 层。

四、NoRoute 处理 404

没有匹配到路由时,可以统一返回 JSON:

router.NoRoute(func(c *gin.Context) {
	c.JSON(404, gin.H{
		"message": "接口不存在",
	})
})

比默认 HTML 404 更适合前后端分离接口。