基础路由配置
路由是 Web 应用入口,Gin 提供简洁的路由配置方式。
HTTP 方法路由
Go
func main() {
r := gin.Default()
r.GET("/users", listUsers) // 获取列表
r.POST("/users", createUser) // 创建资源
r.PUT("/users/:id", updateUser) // 更新资源
r.DELETE("/users/:id", deleteUser) // 删除资源
r.PATCH("/users/:id", patchUser) // 部分更新
// 其他方法
r.OPTIONS("/users", optionsHandler) // CORS 预检
r.HEAD("/users", headHandler) // 只返回头
r.Run(":8080")
}
路由参数
Go
// 单个参数
r.GET("/user/:id", func(c *gin.Context) {
id := c.Param("id")
c.String(200, "用户ID: %s", id)
})
// 多个参数
r.GET("/user/:id/:name", func(c *gin.Context) {
id := c.Param("id")
name := c.Param("name")
c.String(200, "ID=%s, Name=%s", id, name)
})
// 通配符参数
r.GET("/file/*path", func(c *gin.Context) {
path := c.Param("path") // 包含前导斜杠
c.String(200, "路径: %s", path)
})
路由组
Go
// 基础路由组
userGroup := r.Group("/users")
{
userGroup.GET("", listUsers)
userGroup.GET("/:id", getUser)
userGroup.POST("", createUser)
userGroup.PUT("/:id", updateUser)
userGroup.DELETE("/:id", deleteUser)
}
// 嵌套路由组
api := r.Group("/api")
v1 := api.Group("/v1")
{
v1.GET("/users", listUsers)
v1.GET("/products", listProducts)
}
v2 := api.Group("/v2")
{
v2.GET("/users", listUsersV2)
}
分离处理函数
Go
// 定义处理函数
func ListUsers(c *gin.Context) {
c.JSON(200, gin.H{"message": "list users"})
}
func GetUser(c *gin.Context) {
id := c.Param("id")
c.JSON(200, gin.H{"id": id})
}
// 注册路由
r.GET("/users", ListUsers)
r.GET("/users/:id", GetUser)
多路由注册
Go
// 一个路径多方法
r.Any("/health", func(c *gin.Context) {
c.String(200, "healthy")
})
// 单个处理函数处理多路由
handler := func(c *gin.Context) {
c.String(200, "same handler")
}
r.GET("/a", handler)
r.POST("/a", handler)
处理函数签名
Go
// 标准处理函数
type HandlerFunc func(c *gin.Context)
// 获取请求信息
func handler(c *gin.Context) {
method := c.Request.Method // HTTP 方法
path := c.Request.URL.Path // 请求路径
host := c.Request.Host // 主机名
c.JSON(200, gin.H{
"method": method,
"path": path,
"host": host,
})
}
路由组可以添加中间件,实现分组权限控制等功能。
要点总结
- Gin 支持 GET/POST/PUT/DELETE/PATCH 等 HTTP 方法
:id是参数匹配,*path是通配符匹配r.Group()创建路由组,支持嵌套- 处理函数签名为
func(c *gin.Context) r.Any()注册所有 HTTP 方法
📝 发现内容有误?点击此处直接编辑