У меня возникают проблемы с пониманием того, как я могу проверить, превышен ли контекст, установленный тайм-аутом, или нужно ли вообще проверять?
Это фрагмент из 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)
выдаст мне ошибку, включая превышение крайнего срока (если он будет превышен), поэтому я думаю, что мне даже не нужно явно проверять?
Но затем, просматривая Интернет, чтобы лучше понять, как работают контексты, я сталкиваюсь с вариантами выбора, которые явно проверяют контексты, как показано ниже (фрагмент кода из 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")
}
СледуетЯ буду явно проверять это? Если нет, то когда я должен использовать явные проверки? Спасибо за ваше время и помощь!