Введение в контекст в Go
Контекст в Go это значение, которое идет первым аргументом в функцию и дальше передается вниз по вызовам. Через него родитель сообщает дочерним веткам, что работу пора прекратить, и иногда передает одно короткое значение, не тянущее отдельную структуру параметров.
Сигнал отмены связан с каналом, который
закрывается, когда контекст считают
завершенным. Горутина может ждать этот
канал так же, как ждала бы свой done
из раздела про каналы, и выйти из цикла
или долгой операции, не дожидаясь конца
сама по себе.
Корень дерева контекстов не отменяют: его берут, когда нет внешнего срока и нечего отменять сверху. От корня строят дочерние контексты с ручной отменой, со сроком или с прикрепленным значением. Заглушку ставят, пока место для контекста в коде уже есть, а конкретный родитель еще не выбран.
В этом разделе разберем корень и заглушку, ручную отмену, срок, значение по ключу и закрепим приемы в задачах. Горутины, каналы и ожидание сигнала конца работы уже знакомы; HTTP и базу здесь не затрагиваем, хотя позже тот же пакет часто появится и там.