Sobes.tech
Senior

Какво е контекст (context) в Go и защо е необходим?

sobes.tech AI

Отговор от AI

В Go context е пакет и тип, който се използва за предаване на сигнали за анулиране, времеви ограничения и други важни данни между горутините.

Основните задачи на context:

  • Позволява анулиране на операции (например заявки към бази данни или HTTP) при достигане на таймаут или при анулиране от потребителя.
  • Предава времеви ограничения (deadlines) за операциите.
  • Позволява предаване на стойности между функции (например идентификатори на заявки).

Пример за използване:

ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()

select {
case result := <-doWork(ctx):
    fmt.Println("Резултат:", result)
case <-ctx.Done():
    fmt.Println("Операцията е отменена или изтече таймаут")
}

Тук ctx се предава на функцията doWork, която може да прекъсне работата си, ако контекстът бъде отменен или изтече таймаутът. Това помага за управлението на живота на операциите и ресурсите в конкурентни програми.