我很难理解如何判断上下文是否超过了超时设置的最后期限,或者是否应该判断?

这是mongo go driver的一个片段:

client, err := NewClient("mongodb://foo:bar@localhost:27017")
if err != nil { return err }
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
defer cancel()
err = client.Connect(ctx)
if err != nil { return err }

阅读这段代码,我如何知道上下文是否超过了最后期限?根据我天真的理解(或不理解),第err = client.Connect(ctx)行会给我错误,包括超过截止日期(如果超过),因此我认为我甚至不需要明确判断?

但是,在环顾互联网以更好地理解上下文是如何工作的时候,我遇到了使用select cases显式判断上下文的情况,如下所示(http://p.agnihotry.com/post/understanding_the_context_package_in_golang/中的代码片段):

//Use a select statement to exit out if context expires
  select {
  case <-ctx.Done():
    fmt.Println("sleepRandomContext: Time to return")
  case sleeptime := <-sleeptimeChan:
    //This case is selected when processing finishes before the context is cancelled
    fmt.Println("Slept for ", sleeptime, "ms")
  }

我应该明确判断它吗?如果没有,我应该在什么时候使用显式判断?

推荐答案

问题第二部分中的select个代码是Connect方法中的代码可能是什么样子.在那里,它正在判断ctx.Done()是否准备好发送.如果是,则由于超时或调用cancel(),上下文被取消.

错误就是价值.这样对待他们.如果了解错误原因(网络中断?意外数据?超时?)对您来说很重要然后你应该做判断并采取相应的行动.如果无论原因如何,从错误中恢复都是相同的,那么判断错误并不重要.

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

MongoDB聚合匹配字符串字符

在单个mongo文档中组合数组与聚合

MongoDB:如何通过增量向量递增整数向量

筛选出嵌套数组中的记录Mongo DB聚合

无法配置数据源:未指定url属性,无法为 MongoDb 配置嵌入数据源

pymongo - ifnull 重新调整整个对象而不是特定字段

分组前的 MongoDb 聚合总数

Mongodb,在一个查询中用正则表达式更新部分字符串

如何将记录从一个 mongo 数据库插入另一个?

更新文档中的数组时,如何在 MongoDB 和 C# 中使用 $push 更新修饰符

.insertOne 不是函数

为什么mongodb的文档中存储键名

Meteor 如何接收对 MongoDB 查询结果的更新?

MongoDB 3 Java判断集合是否存在

如何从 node.js 以编程方式执行 mongodump 命令?

$orderby 和 Sort 之间的 MongoDB 区别

从 mongo 结果中删除 _id

何时使用Singleton单例、Transient和使用 Ninject 和 MongoDB 的请求

MissingSchemaError:Schema hasn't been registered for model