所有 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 请求的子级,以便超时和取消在处理程序内进行?创建包装函数会破坏上下文的全部目的吗?
翻翻过去那场雪
相关分类