所有 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 选项设置套接字超时,这可以为整个程序完成一次,但与每次操作超时并不完全相同。
另请注意,通常正在努力改进驱动程序中的每次操作超时处理。
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消