Метод context.Context.Err

Метод context.Context.Err возвращает ошибку, которая объясняет причину, по которой контекст был завершен. Если контекст еще не завершен, метод возвращает nil. Метод не принимает никаких параметров и возвращает ошибку типа error.

Синтаксис

goerr := ctx.Err()

Пример

Давайте создадим контекст с отменой и проверим ошибку после вызова функции отмены:

gopackage main

import (
  "context"
  "fmt"
)

func main() {
  ctx, cancel := context.WithCancel(context.Background())
  cancel()
  err := ctx.Err()
  fmt.Println(err)
}

Результат выполнения кода:

go"context canceled"

Пример

Давайте создадим контекст с таймаутом и проверим ошибку после истечения времени:

gopackage main

import (
  "context"
  "fmt"
  "time"
)

func main() {
  ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond)
  defer cancel()
  time.Sleep(20 * time.Millisecond)
  err := ctx.Err()
  fmt.Println(err)
}

Результат выполнения кода:

go"context deadline exceeded"

Пример

Давайте проверим ошибку контекста, который еще не был завершен:

gopackage main

import (
  "context"
  "fmt"
)

func main() {
  ctx := context.Background()
  err := ctx.Err()
  fmt.Println(err)
}

Результат выполнения кода:

go"<nil>"

Смотрите также

  • метод context.Context.Done,
    который возвращает канал для ожидания завершения контекста
  • метод context.Context.Deadline,
    который возвращает время завершения контекста
  • функцию context.WithCancel,
    которая создает контекст с функцией отмены
  • функцию context.WithTimeout,
    которая создает контекст с таймаутом