将代码从全局符号包迁移到 go mongo-driver 时,了解适当的context.TODO() 和 context.Background() 的使用至关重要。
Background()
根据文档, context.Background() 返回一个非-nil, 空 具有以下特征的上下文:
常用在主函数、初始化和测试中。当没有有意义的上下文可用时, context.Background() 提供后备。
TODO()
context.TODO() 还会返回一个非零的空值语境。然而,它的预期用途是当不清楚使用哪个 Context 或上下文尚不可用时。通过使用 context.TODO(),您可以明确记录您需要一个上下文,但当前没有特定的上下文。
最佳实践
示例用法
考虑以下场景,其中HTTP 处理程序需要在特定时间限制内执行 MongoDB 查询:
ctx, cancel := context.WithTimeout(r.Context(), 6 * time.Second) defer cancel() // ctx automatically times out after 6 seconds curs, err := c.Find(ctx, bson.M{"some": "filter"})
在此示例中, context.WithTimeout() 创建一个派生自请求上下文 (r.Context()) 的新上下文。如果 MongoDB 操作超过 6 秒,上下文就会超时,表明应该取消查询。
结论
在 context.TODO() 和 context 之间进行选择。 Background() 是了解特定使用场景并确保为下游函数提供有意义且适当的上下文的问题。
以上是Context.Background() 与 Context.TODO():什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!