Контроль таймаута в Go с context.WithTimeout

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

gocontext.withtimeoutтаймаут

👁 В продакшн-коде важно не допускать зависаний из-за долгих запросов к API, базе или стороннему сервису. В Go для этого есть встроенный механизм — контексты с таймаутом, которые позволяют элегантно обрывать выполнение операции.

📝 Пример кода:

package main

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

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

  done := make(chan string)
  go func() {
    time.Sleep(3 * time.Second) // имитация долгой операции
    done <- "Задача завершена!"
  }()

  select {
  case res := <-done:
    fmt.Println(res)
  case <-ctx.Done():
    fmt.Println("Таймаут: операция прервана")
  }
}

📌 Как это работает:

Контекст с таймаутом завершает горутину, если она не успевает уложиться во время. Такой подход гарантирует, что ваш сервис не будет висеть бесконечно, ожидая ответа.

🔎 Преимущества:

  • Простая реализация буквально в пару строк
  • Универсально подходит для любых операций (API, БД, вычисления)
  • Обязательный паттерн для надёжных сервисов

❗️ Must have для любого Go-проекта, где важна отказоустойчивость.

tags: #go #разработка

❤️ @recura_tech

Скриншот кода на Go с примером использования context.WithTimeout для контроля таймаута, select и горутины; виден водяной знак канала RECURA.
Скрин с примером кода context.WithTimeout и отметкой канала RECURA.

Читайте так же