如何在Go handlerfunc中传递全局变量和Go Context

问题描述

所以,我是编程和Go语言的新手,所以如果我做错了事,请原谅我。我正在用Go构建一个rest API。我正在使用GORM访问我的Postresql数据库,并且我想使用Redis存储JSON Web密钥。 Go Context是我尚不了解的东西,但是我需要它来根据如下文档在Redis中进行设置:

Set(ctx Context,key string,value interface{},expiration Duration) *StatusCmd

如我现在所见,我可以做两件事来访问Redis,Go Context和处理程序中的DB,而无需给它提供3个参数。将下面的Struct传递给处理程序

type env struct {
    ctx *context.Context
    db  *gorm.DB
    rdb *redis.Client
}

handler.ListItems(env{ctx: context.Todo(),db: gorm.DB,redis.Client})

或将变量存储在Go上下文中

ctx := context.WithValue(context.Background(),"db",gorm.DB)
ctx = context.WithValue(ctx,"rdb",redis.Client)

handler.ListItems(ctx)

所以我的问题是:在这种情况下,最佳实践是什么?为什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)