Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpCtBg 174 of 280 menu
◀ ▶

Корень и заглушка контекста в Go

Корневой контекст не привязан к сроку и не закрывает канал отмены. Его обычно кладут в main или в верхнюю команду сервиса и передают в функции, которые сами построят дочерние контексты с отменой или сроком.

Заглушку ставят там же, где позже появится настоящий родитель: код уже компилируется, а источник контекста еще не решен. Поведение у заглушки такое же, как у корня, она тоже не отменяется сама.

Обе команды возвращают готовое значение типа интерфейса контекста; проверим, что они не пустые:

package main import ( "context" "fmt" ) func main() { root := context.Background() placeholder := context.TODO() fmt.Println(root != nil, placeholder != nil) }

На экране два раза true. Ни у корня, ни у заглушки нет смысла вызывать функцию отмены: отменять нечего.

В библиотечной функции, где родитель пока неизвестен, временно передают заглушку; когда вызов сверху дорастет, ее заменят на переданный контекст:

package main import ( "context" "fmt" ) func report(ctx context.Context) { fmt.Println(ctx != nil) } func main() { report(context.TODO()) report(context.Background()) }

Дан следующий код:

var ctx context.Context

Присвойте ctx корневой контекст и выведите, что он не равен nil.

Скажите, чем корень отличается от контекста с ручной отменой, которую разберем в следующем уроке.

Скажите, когда уместнее заглушка, а когда сразу корень в main.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить