如何在go handlerfunc中传递全局变量和go上下文

ijnw1ujt  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(293)

所以,我是一个新的编程和去,所以原谅我,如果我做错了什么。我正在用go构建restapi。我使用gorm来访问postresqldb,并且我想使用redis来存储jsonweb密钥。go context是我还不了解的东西,但我需要它来设置redis中的内容,根据以下文档:

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

正如我现在看到的,我可以做两件事来访问redis,go context和处理程序中的db,而不需要给它3个参数。将下面这样的结构传递给处理程序

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)

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题