Golang Go语言中 gin 中间件怎么传值
//中间件里边是这样定义的
var user models.User
res := pkg.Db.Model(&models.User{}).Where("accid = ?", accid).
Where("token = ?", token).
Where("token_expire >= ?", time.Now().Unix()).Find(&user)
if res.Error != nil {
pkg.Fail(c, 403, "用户 token 已失效", nil)
c.Abort()
return
}
c.Set("user", user)
user, ok := c.Get("user")
if !ok {
return errors.New("获取用户信息失败"), nil
}
但是在方法里边获取报错
Golang Go语言中 gin 中间件怎么传值
更多关于Golang Go语言中 gin 中间件怎么传值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
<br>// Header is a intelligent shortcut for c.Writer.Header().Set(key, value).<br>// It writes a header in the response.<br>// If value == "", this method removes the header `c.Writer.Header().Del(key)`<br>func (c *Context) Header(key, value string) {<br> if value == "" {<br> c.Writer.Header().Del(key)<br> return<br> }<br> c.Writer.Header().Set(key, value)<br>}<br><br>// GetHeader returns value from request headers.<br>func (c *Context) GetHeader(key string) string {<br> return c.requestHeader(key)<br>}<br><br>
更多关于Golang Go语言中 gin 中间件怎么传值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
中间件加个日志, 确保你的 user set 进去了
fmt.Printf("%v", user)
userInfo, err := json.Marshal(user)
if err != nil {
pkg.Fail(c, 403, “用户信息转化失败”, nil)
c.Abort()
return
}
c.Writer.Header().Set(“userInfo”, string(userInfo))
user := c.Writer.Header().Get(“userInfo”)
err := json.Unmarshal([]byte(user), &userInfo)
if err != nil {
return err, nil
}
我是直接转化成字符串来处理
谢谢各位,现在可以了。
请教下,可变变量如何传值
获取了一个数组[1,2,3]
我转化的数据是"1","2"
但是给 redis 传值失败
func (c *cmdable) HMGet(key string, fields …string) *SliceCmd
你的用法错了, 调用的时候应该是
fields := []string{“name”, “age”, “weight”}
key := "users:1"
redis.HMGet(key, fields…)
明白了
顺便问下,go 返回值怎么拼接返回的结构。
比如第一个列,展示 3 个字段。其余几列都是 10 个字段,
怎么把他们拼接到一个列表上。
类似于 php 的 array_merge 把不同字段的数组拼接到一块
返回的 json 如下
[{“id”:1},{“name”:"\u674e\u56db"},{“name”:"\u5f20\u4e09"}]
没理解你的意思, 不应该是第一行吗? 直接给原始数据和返回后的数据看看
我试出来了,首先定义个新结构体,然后 make 这个结构,对这个结构体赋值{“id”:1}。然后对{“name”:"\u674e\u56db"},{“name”:"\u5f20\u4e09"}结构体循环赋值到新结构体上。
在Go语言的Gin框架中,中间件(Middleware)是用于在处理HTTP请求之前或之后执行特定任务的函数。要在中间件之间传递值,通常有以下几种方法:
-
使用Gin的上下文(Context): Gin的上下文对象
*gin.Context
在整个请求的生命周期内是共享的,你可以通过它来在中间件之间传递数据。使用context.Set(key, value)
存储数据,context.Get(key)
获取数据。例如:func Middleware1(c *gin.Context) { c.Set("myKey", "myValue") c.Next() } func Middleware2(c *gin.Context) { value := c.Get("myKey") // 使用value做进一步处理 c.Next() }
-
使用请求作用域变量: 如果数据只需要在某个特定请求处理函数中使用,可以在该处理函数中直接从上下文中获取。
-
全局变量或状态管理: 对于需要在多个请求之间共享的数据,可以考虑使用全局变量、数据库或分布式缓存等状态管理方式。不过,这种方法需要谨慎使用,以避免数据竞争和副作用。
通常情况下,推荐使用Gin的上下文来在中间件之间传递数据,因为它简单且符合Gin框架的设计哲学。确保在适当的时候调用c.Next()
以继续请求处理流程。