为了账号安全,请及时绑定邮箱和手机立即绑定

mongo-go-driver 上下文包装函数

mongo-go-driver 上下文包装函数

Go
HUH函数 2022-06-27 14:58:00
所有 mongo-go-driver 的数据库查询方法都接受一个上下文:func (coll *Collection) Find(ctx context.Context, ...)通常将带有超时的 http 请求上下文的子项传递给这些查询方法:ctx, cancel = context.WithTimeout(request.Context()), 5*time.Second)defer cancel()cur, err := collection.Find(ctx, ...)这会在 Web 应用程序的代码库中创建大量样板。我正在考虑创建在内部创建上下文的包装函数:func (db *Database) FindWithContext(filter interface{}) error {  ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)  defer cancel()    return db.Collection.Find(ctx, filter)}这是一个不好的做法吗?上下文是否应该是 http 请求的子级,以便超时和取消在处理程序内进行?创建包装函数会破坏上下文的全部目的吗?
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

如果这对你有用,我认为按照你的建议去做没有问题。Go 驱动程序通常使用起来很冗长。

请注意,大多数驱动程序并未按照 Go 驱动程序建议的使用方式为每个操作指定超时。

您可以考虑通过 URI 选项设置套接字超时,这可以为整个程序完成一次,但与每次操作超时并不完全相同。

另请注意,通常正在努力改进驱动程序中的每次操作超时处理。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信