Функция context.Cause
Функция context.Cause возвращает причину отмены контекста.
Она принимает один параметр - контекст ctx context.Context.
Если контекст был отменен с указанием причины (через функции
context.WithCancelCause, context.WithTimeoutCause
или context.WithDeadlineCause), то Cause вернет эту
причину (ошибку). Если контекст был отменен без причины,
возвращается nil. Если контекст еще не отменен,
функция также возвращает nil.
Синтаксис
cause := context.Cause(ctx)
Пример
Давайте создадим контекст с отменой по причине и получим
эту причину с помощью context.Cause:
package main
import (
"context"
"errors"
"fmt"
)
func main() {
ctx, cancel := context.WithCancelCause(context.Background())
cancel(errors.New("user cancelled"))
cause := context.Cause(ctx)
fmt.Println(cause)
}
Результат выполнения кода:
"user cancelled"
Пример
Если контекст отменен без указания причины, context.Cause
возвращает nil:
package main
import (
"context"
"fmt"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
cancel()
cause := context.Cause(ctx)
fmt.Println(cause)
}
Результат выполнения кода:
<nil>
Пример
Для контекста с таймаутом и причиной функция вернет указанную ошибку:
package main
import (
"context"
"errors"
"fmt"
"time"
)
func main() {
ctx, cancel := context.WithTimeoutCause(
context.Background(),
1*time.Millisecond,
errors.New("operation timed out"),
)
defer cancel()
time.Sleep(2 * time.Millisecond)
cause := context.Cause(ctx)
fmt.Println(cause)
}
Результат выполнения кода:
"operation timed out"
Смотрите также
-
функцию
context.WithCancelCause,
которая создает контекст с возможностью отмены по причине -
функцию
context.WithTimeoutCause,
которая создает контекст с таймаутом и причиной отмены -
функцию
context.WithDeadlineCause,
которая создает контекст с дедлайном и причиной отмены -
функцию
context.CancelCauseFunc,
которая представляет функцию отмены контекста с причиной