Метод context.Context.Deadline
Метод Context.Deadline возвращает крайний срок,
до которого должен быть завершен контекст, и булево
значение, указывающее, установлен ли этот срок.
Если срок установлен, метод возвращает время и
true, иначе - нулевое время и
false.
Синтаксис
deadline, ok := ctx.Deadline()
Пример
Давайте создадим контекст с крайним сроком и проверим, установлен ли он:
package 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)
}
Результат выполнения кода:
"deadline: 2026-09-04 15:30:25.123456 +0300 MSK, ok: true"
Пример
Проверим, что возвращает метод для контекста без крайнего срока:
package main
import (
"context"
"fmt"
)
func main() {
ctx := context.Background()
deadline, ok := ctx.Deadline()
fmt.Printf("deadline: %v, ok: %v\n", deadline, ok)
}
Результат выполнения кода:
"deadline: 0001-01-01 00:00:00 +0000 UTC, ok: false"
Как видно из примера, для контекста без крайнего срока
возвращается нулевое время и false.
Пример
Используем крайний срок для ограничения времени выполнения операции:
package 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())
}
}
Результат выполнения кода:
"Operation canceled: context deadline exceeded"
Смотрите также
-
метод
Context.Done,
который возвращает канал для ожидания отмены контекста -
метод
Context.Err,
который возвращает причину отмены контекста -
функцию
WithDeadline,
которая создает контекст с крайним сроком -
функцию
WithTimeout,
которая создает контекст с таймаутом