В Go стандартный пакет context предоставляет несколько функций для создания контекстов:
context.Background(): Возвращает непустой контекст, который обычно используется в качестве корневого контекста для начала выполнения программы. Он никогда не отменяется, не имеет крайнего срока и не несет никаких значений.
context.TODO(): Возвращает непустой контекст. Используется, когда вы точно не знаете, какой контекст использовать, или когда функция еще не обновлена для приема контекста. Подобно Background(), он никогда не отменяется, не имеет крайнего срока и не несет значений. Это временный заполнитель.
context.WithCancel(parent Context): Возвращает производный контекст, который может быть отменен с помощью возвращаемой функции cancel. Отмена этого контекста освобождает ресурсы, связанные с ним и его дочерними элементами.
go
context.WithDeadline(parent Context, deadline time.Time): Возвращает производный контекст, который будет отменен автоматически в указанное время deadline. Также возвращает функцию cancel, которая может быть вызвана раньше для отмены.
go
context.WithTimeout(parent Context, timeout time.Duration): Подобно WithDeadline, но принимает продолжительность времени. Возвращает производный контекст, который будет отменен автоматически по истечении указанного timeout.
go
context.WithValue(parent Context, key, val any): Возвращает производный контекст, который несет указанную пару ключ/значение. Используется для передачи данных, специфичных для запроса, через API.
go
Эти функции позволяют строить иерархию контекстов, где дочерние контексты наследуют свойства от родительских и могут быть отменены независимо или при отмене родителя.