Метод context.Context.Deadline

Метод Context.Deadline возвращает крайний срок, до которого должен быть завершен контекст, и булево значение, указывающее, установлен ли этот срок. Если срок установлен, метод возвращает время и true, иначе - нулевое время и false.

Синтаксис

godeadline, ok := ctx.Deadline()

Пример

Давайте создадим контекст с крайним сроком и проверим, установлен ли он:

gopackage main

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

func main() {
  ctx, cancel := context.WithDeadline(
    context.Background(),
    time.Now().Add(5*time.Second),
  )
  defer cancel()

  deadline, ok := ctx.Deadline()
  fmt.Printf("deadline: %v, ok: %v\n", deadline, ok)
}

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

go"deadline: 2026-09-04 15:30:25.123456 +0300 MSK, ok: true"

Пример

Проверим, что возвращает метод для контекста без крайнего срока:

gopackage main

import (
  "context"
  "fmt"
)

func main() {
  ctx := context.Background()

  deadline, ok := ctx.Deadline()
  fmt.Printf("deadline: %v, ok: %v\n", deadline, ok)
}

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

go"deadline: 0001-01-01 00:00:00 +0000 UTC, ok: false"

Как видно из примера, для контекста без крайнего срока возвращается нулевое время и false.

Пример

Используем крайний срок для ограничения времени выполнения операции:

gopackage main

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

func main() {
  ctx, cancel := context.WithDeadline(
    context.Background(),
    time.Now().Add(2*time.Second),
  )
  defer cancel()

  select {
  case <-time.After(3 * time.Second):
    fmt.Println("Operation completed")
  case <-ctx.Done():
    fmt.Println("Operation canceled:", ctx.Err())
  }
}

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

go"Operation canceled: context deadline exceeded"

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

  • метод Context.Done,
    который возвращает канал для ожидания отмены контекста
  • метод Context.Err,
    который возвращает причину отмены контекста
  • функцию WithDeadline,
    которая создает контекст с крайним сроком
  • функцию WithTimeout,
    которая создает контекст с таймаутом