Здравствуйте, уже второй день пытаюсь въехать в Context, который практически везде используется в Go. Но не могу понять, для чего именно и какой смысл в его использовании. Статьи не помогают, походу я совсем безнадежен.
Ответ
Контекст - это просто сборник мета-данных, ассоциированных с каким-то запросом. Простейший пример - HTTP-запросы. Контекст пришедшего в HTTP-хендлер запроса отменяется, когда разрывается TCP-соединение. Предположим, ваш HTTP-хендлер делает какую-то сложную работу в цикле. Перед хендлером стоит промежуточный слой (middleware), которая берёт находит пользователя, например по куки, и кладёт в контекст запроса. Итоговый хендлер может выглядеть так:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
user := userFromContext(ctx)
if user == nil {
http.Error(w, "no user", http.StatusBadRequest)
return
}
for i := 0; i < N; i++ {
select {
case <-ctx.Done():
log.Printf("request cancelled: %v", ctx.Err())
return
default:
}
doSomethingSlow(i, user)
}
})
Комментариев нет:
Отправить комментарий