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

Практика на контекст в Go

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

root := context.Background()

Получите от root контекст с ручной отменой, повесьте функцию отмены на defer и выведите, что канал Done еще не закрыт, пока отмену не вызывали.

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

parent := context.Background() go func(ctx context.Context) { <-ctx.Done() fmt.Println("off") }(parent)

Замените аргумент ветки на контекст с ручной отменой от parent, вызовите отмену из main и дождитесь печати "off".

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

base := context.Background()

Постройте контекст со сроком сто миллисекунд от base, дождитесь Done и выведите "time up".

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

for i := 0; i < 1000; i++ { select { default: } }

Оберните цикл в ветку с контекстом со сроком десять миллисекунд от корня; на каждой итерации выходите, если Done уже закрыт, и напечатайте "left loop".

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

type roleKey struct{} ctx := context.Background()

Запишите в ctx роль "guest" и передайте контекст в функцию, которая печатает значение по roleKey.

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

type idKey struct{} outer := context.WithValue( context.Background(), idKey{}, 1, ) inner, stop := context.WithCancel(outer) defer stop()

Выведите число из inner по idKey, затем вызовите stop и скажите, останется ли значение доступным после отмены.

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