Какие новые методы контекста появились в версии Go 1.21

«Какие новые методы контекста появились в версии Go 1.21» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go 1.21 появились два новых метода контекста:

  1. WithDeadlineCause(parent Context, d time.Time, cause error) (Context, CancelFunc)
    Аналог WithDeadline, но позволяет указать причину отмены, которая будет доступна через context.Cause().

  2. WithTimeoutCause(parent Context, timeout time.Duration, cause error) (Context, CancelFunc)
    Аналогично, но для таймаута.

Пример:

ctx, cancel := context.WithTimeoutCause(
    context.Background(),
    time.Second,
    errors.New("processing took too long"),
)
defer cancel()

// ...

if err := ctx.Err(); err != nil {
    cause := context.Cause(ctx) // получим "processing took too long"
}