Senior
Čo sa stane, ak odovzdáte pôvodný kontext HTTP požiadavky do GoRoutine?
sobes.tech AI
Odpoveď od AI
Ak predate pôvodný kontext (context.Context) HTTP požiadavky do samostatnej gorutiny, keď je tento kontext zrušený alebo vyprší (napríklad, keď klient zatvorí spojenie alebo vyprší časový limit), kontext v gorutine bude tiež zrušený. To môže viesť k nečakanej prerušeniu práce gorutiny, ak na ňu závisí.
Preto, ak má gorutina pracovať nezávisle od životného cyklu HTTP požiadavky, je vhodné vytvoriť samostatný kontext (napríklad pomocou context.Background() alebo context.WithCancel()), aby sa predišlo predčasnému ukončeniu. Inak je užitočné použiť pôvodný kontext na správu doby života operácií súvisiacich s požiadavkou.
Príklad:
func handler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
go func(ctx context.Context) {
// Táto gorutina skončí, ak bude ctx zrušený
select {
case <-time.After(5 * time.Second):
fmt.Println("Práca dokončená")
case <-ctx.Done():
fmt.Println("Kontekst zrušený")
}
}(ctx)
w.Write([]byte("Odpoveď odoslaná"))
}