Golang Go语言中gin是否有类似flask、django的缓存装饰器用法

发布于 1周前 作者 phonegap100 来自 Go语言

python 下的 flask django 使用中间件 cache ,可以方便地使用 redis 缓存。 gin 下不知道有没有类似的用法。 没有的话,只能 json 序列化,从 redis 里面取了


Golang Go语言中gin是否有类似flask、django的缓存装饰器用法
4 回复

go 的中间件不都是这么实现的。只是没有对应的语法糖而已

更多关于Golang Go语言中gin是否有类似flask、django的缓存装饰器用法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go 的反射做不带这些东西,类似场景 go 要么硬编码要么代码生成。

没有语法糖实现装饰器

如果是缓存返回结果可以使用中间件

在Golang的Gin框架中,虽然没有直接类似于Flask或Django中装饰器(decorators)那样用于缓存的语法糖,但你可以通过中间件(Middleware)来实现类似的缓存功能。

Gin中间件是一种处理HTTP请求的函数,它可以在请求被处理之前或之后执行。为了实现缓存,你可以编写一个中间件来检查请求是否可以被缓存(比如基于请求路径、参数或头部信息),如果可以,则从缓存中读取响应并返回;如果不可以,则继续处理请求,并将响应存储到缓存中。

以下是一个简化的例子,展示了如何使用Gin中间件和内存缓存(比如使用github.com/patrickmn/go-cache库)来实现缓存功能:

package main

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

func main() {
    store := cache.New(5*time.Minute, 10*time.Minute)
    r := gin.Default()

    r.Use(func(c *gin.Context) {
        // 缓存逻辑
        if value, found := store.Get(c.Request.URL.Path); found {
            c.Data(http.StatusOK, "text/plain", []byte(value.(string)))
            c.Abort()
        } else {
            c.Next()
            // 将响应存储到缓存中
            store.Set(c.Request.URL.Path, c.GetBodyString(), cache.DefaultExpiration)
        }
    })

    r.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello, World!")
    })

    r.Run()
}

这个例子中,我们创建了一个简单的内存缓存,并在Gin中间件中检查缓存。注意,这只是一个基础示例,实际应用中可能需要更复杂的缓存策略和错误处理。

回到顶部