Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Объясните смысл Context в Go

#golang #context


Здравствуйте, уже второй день пытаюсь въехать в Context, который практически везде
используется в Go. Но не могу понять, для чего именно и какой смысл в его использовании.
Статьи не помогают, походу я совсем безнадежен.
    


Ответы

Ответ 1



Контекст - это просто сборник мета-данных, ассоциированных с каким-то запросом. Простейший пример - 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) } })

Комментариев нет:

Отправить комментарий