2025/12/26 23:02:06
网站建设
项目流程
站长素材音效网,企业门户源码,网站管理维护怎么做,wordpress同标题覆盖这一篇笔记主要介绍 gin.Engine#xff0c;设置路由等操作#xff0c;以下是本篇笔记目录#xff1a;gin.Default() 和 gin.New()HTTP 方法路由分组与中间件1、gin.Default() 和 gin.New()前面第一篇笔记介绍#xff0c;创建一个 gin 的路由引擎使用的函数是 gin.Default()…这一篇笔记主要介绍 gin.Engine设置路由等操作以下是本篇笔记目录gin.Default() 和 gin.New()HTTP 方法路由分组与中间件1、gin.Default() 和 gin.New()前面第一篇笔记介绍创建一个 gin 的路由引擎使用的函数是 gin.Default()返回的类型是 *gin.Engine我们可以使用其创建路由和路由组。除了这个函数外还有一个 gin.New()其返回的也是 *gin.Engine但是不一样的是 gin.Default() 会对 gin.Engine 添加默认的 Logger() 和 Recovery() 中间件。这两个函数大致内容如下func New(opts ...OptionFunc) *Engine {...}func Default(opts ...OptionFunc) *Engine {...engine : New()engine.Use(Logger(), Recovery())...}我们使用第一篇笔记中使用 debug 模式运行系统后输出的信息可以再看一下[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in debug mode. Switch to release mode in production.- using env: export GIN_MODErelease- using code: gin.SetMode(gin.ReleaseMode)[GIN-debug] GET /test -- main.main.func1 (3 handlers)[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.[GIN-debug] Listening and serving HTTP on :9898我们使用的是 gin.Default() 运行的系统所以在第一行告诉我们创建了一个带有 Logger and Recovery 中间件的 Engine。同时第三行输出路由信息的地方标明了这个路由指向的处理函数后面的括号里是 3 handlers这个意思是除了我们处理路由的 handler还有两个默认的中间件 handler也就是这里的 Logger() 和 Recovery() 中间件。下面介绍一下 Logger() 和 Recovery() 这两个 handler 的作用。1. Logger()默认的 Logger() 会输出接口调用的信息比如第一篇中我们定义了一个 /test 接口当我们调用这个接口的时候控制台会输出下面这条信息[GIN] 2025/08/19 - 23:15:26 | 200 | 36.666µs | 127.0.0.1 | GET /test可以看到日志中会包含请求时间、返回的 HTTP 状态码、请求耗时、调用方 ip、请求方式和接口名称等。这条日志信息的输出就是 Logger() 这个中间件起的作用。在其内部会调用一个 LoggerWithConfig() 函数获取到请求的 ip、记录调用时间、调用方式等信息然后进行输出下面是部分源码信息param.TimeStamp time.Now()param.Latency param.TimeStamp.Sub(start)param.ClientIP c.ClientIP()param.Method c.Request.Methodparam.StatusCode c.Writer.Status()param.ErrorMessage c.Errors.ByType(ErrorTypePrivate).String()2. Recovery()Recovery() 中间件则可以为我们捕获程序中未处理的 panic记录错误信息并返回 500 状态码信息比如我们在第一篇笔记中使用的 TestHandler 函数我们在其中加一个除数为 0 的错误func TestHandler(c *gin.Context) {response : TestResponse{Code: 0,Message: success,}a : 0fmt.Println(1 / a)c.JSON(http.StatusOK, response)}在接口调用的时候如果我们使用的是 gin.Default()那么客户端不会报错而是会收到一个 HTTP 状态码为 500 的报错信息而如果使用的是 gin.New()客户端则会直接发生错误。总的来说Logger() 和 Recovery() 这两个的中间件是 gin 框架为我们默认添加的对于开发者来说较为友好的两个操作在后面介绍中间件的时候我们也可以手动实现这两个功能。2、HTTP 方法gin.Engine 支持配置 HTTP 多个方法比如 GET、POST、PUT、DELETE 等。以第一篇笔记中的代码为例其设置方法如下r.GET(/test, TestHandler)r.POST(/test, TestHandler)r.PUT(/test, TestHandler)r.DELETE(/test, TestHandler)3、路由分组与中间件除了设置单个路由我们还可以对路由进行分组设置比如需要控制版本或者模块设置需要统一的前缀又或者是需要统一设置中间件功能的时候。其整体代码示例如下package mainimport (fmtnet/httpgithub.com/gin-gonic/gin)type TestResponse struct {Code int json:codeMessage string json:message}func TestHandler(c *gin.Context) {response : TestResponse{Code: 0,Message: success,}c.JSON(http.StatusOK, response)}func main() {r : gin.Default()v1 : r.Group(/v1){v1.GET(/test, TestHandler)}err : r.Run(:9898)if err ! nil {fmt.Println(gin run in 9898 error:, err)}}这里我们设置了一个路由名称以 v1 为前缀的路由组其下每个路由的访问都需要带有 /v1这样就实现了统一设置路由前缀的功能。而如果我们需要向其中添加中间件的时候也可以不用挨个路由进行设置而是在 v1 路由组的设置中就可以实现比如v1 : r.Group(/v1, Middleware1, Middleware2)这样其下每个路由的 handler 函数在调用前就都会先调用 Middleware1 和 Middleware2 这两个中间件。以上就是本篇笔记关于 gin.Engine 的全部内容其实中间件的相关操作也应该属于 gin.Engine 的内容但是那部分需要介绍的知识点和想要用于介绍的代码示例略多所以就单独开一篇笔记在后面再介绍。