Junior — Middle
Hogyan valósítható meg biztonságosan egy goroutine befejezése, amikor a várt eredmény nem érkezik meg, switch-case szerkezet használatával?
sobes.tech MI
Válasz az MI-től
A gorutina biztonságos befejezéséhez, miközben egy eredményt vár, használhatja a select szerkezetet több esettel, beleértve az időkorlátot vagy a megszakítási jelet. Go-ban nincs közvetlen switch-case a csatornákhoz, de a select hasonló funkciót tölt be.
Példa időkorláttal:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Kapott eredmény:", result)
case <-time.After(5 * time.Second):
fmt.Println("Időkorlát elérve, gorutina befejezése")
return
case <-done:
fmt.Println("Befejezési jel érkezett")
return
}
}
Itt a gorutina vár a someChannel-ről érkező adatokra. Ha az adatok nem érkeznek meg 5 másodpercen belül, aktiválódik az időkorlát, és a gorutina befejeződik. Emellett a done csatornán keresztül jelet is küldhetünk a kényszerített befejezéshez.
Ez a megközelítés megakadályozza a gorutina blokkolását, és biztonságosan ellenőrizhetővé teszi azt.