Go 1.21: context.WithCancelCause(parent) - отмена с причиной (cause). context.Cause(ctx) - получить причину отмены. cancel(cause) сохраняет cause; Cause(ctx) возвращает эту причину или ctx.Err(). Удобно для каскадной отмены с причиной.
ctx, cancel := context.WithCancelCause(parent)
cancel(errMyReason)
err := context.Cause(ctx)