探究gin框架实践(下) | 青训营

74 阅读2分钟

一. 路由拆分与注册

1. 基本的路由注册

下面最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo。以上例子都是基本路由注册

func helloHandler(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "message": "Hello www.topgoer.com!",
    })
}

func main() {
    r := gin.Default()
    r.GET("/topgoer", helloHandler)
    if err := r.Run(); err != nil {
        fmt.Println("startup service failed, err:%v\n", err)
    }
}

2.路由拆分

项目的规模增大后就不太适合继续在项目的main.go文件中去实现路由注册相关逻辑了,我们会倾向于把路由部分的代码都拆分出来,形成一个单独的文件或包。

我们可以在routers.go文件中定义并注册路由信息:

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func helloHandler(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "message": "Hello Gin",
    })
}

func setupRouter() *gin.Engine {
    r := gin.Default()
    r.GET("/user", helloHandler)
    return r
}

此时main.go中调用上面定义好的setupRouter函数:

func main() {
    r := setupRouter()
    if err := r.Run(); err != nil {
        fmt.Println("startup service failed, err:%v\n", err)
    }
}

此时的目录结构:

LearnGin
├── go.mod
├── go.sum
├── main.go
└── routers.go

二.基本原理

Gin框架的核心原理是基于HTTP路由匹配和处理。Gin使用了radix树来处理路由匹配,同时使用中间件来处理请求和响应,从而实现高性能的Web服务。

下面是Gin框架处理请求的主要流程:

1. 初始化Gin框架

在程序启动时,需要初始化Gin框架。主要是创建Gin框架的router实例,以及将一些默认的中间件添加到router中。

import "github.com/gin-gonic/gin"func main() {
    r := gin.Default()
    ...
}

2.定义路由

定义HTTP路由,即定义HTTP方法、路径和相应的处理函数。Gin框架支持GET、POST、PUT、DELETE等HTTP方法,并支持路由参数、URL查询参数、POST请求等方式获取请求参数(有兴趣可以按照路由的拆分去进行尝试,这里只是最简单的路由)。

r.GET("/ping", func(c *gin.Context) {
    c.String(http.StatusOK, "pong")
})

3.执行中间件

中间件是Gin框架处理请求和响应的重要部分,中间件可以在请求前、请求后、响应前和响应后进行处理。Gin框架支持全局中间件和局部中间件,使用方法非常简单。

r.Use(gin.Logger())
r.Use(gin.Recovery())

4.处理请求

当收到HTTP请求时,Gin框架会首先将请求交给radix树进行路由匹配,找到对应的路由后,再依次执行路由对应的中间件和处理函数,如下例子。

r.GET("/users/:id", func(c *gin.Context) {
    id := c.Param("id")
    // 根据ID查询用户
    user := getUserById(id)
    c.JSON(http.StatusOK, user)
})

5.处理响应

处理完请求后,Gin框架会将响应结果发送给客户端,响应结果可以是JSON、XML、HTML等格式。

c.JSON(http.StatusOK, gin.H{
    "code": 0,
    "msg":  "success",
    "data": data,
})

三.总结

总的来说,Gin框架的核心原理是基于radix树的路由匹配和中间件的处理。在使用Gin框架时,我们只需要关注定义路由、编写处理函数和中间件即可,Gin框架会自动处理HTTP请求和响应。