Junior — Middle
Kaip saugiai užbaigti gorutinos vykdymą, kai laukiama rezultato, naudojant switch-case konstrukciją?
sobes.tech AI
Atsakymas iš AI
Saugiai užbaigti gorutinas, kai ji laukia rezultato, galima naudoti select konstrukciją su keliais atvejais, įskaitant laikmatį arba atšaukimo signalą. Go kalboje nėra tiesioginio switch-case kanalams, tačiau select atlieka panašią funkciją.
Pavyzdys su laikmačiu:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Gauta rezultatas:", result)
case <-time.After(5 * time.Second):
fmt.Println("Laiko limitas pasibaigė, gorutina užbaigiama")
return
case <-done:
fmt.Println("Gavome užbaigimo signalą")
return
}
}
Čia, gorutina laukia duomenų iš someChannel. Jei duomenys neateina per 5 sekundes, įsijungia laiko limitas ir gorutina užbaigiama. Taip pat galima siųsti signalą per done kanalą, kad priverstinai užbaigtumėte.
Šis požiūris išvengia gorutinos užstringo ir leidžia ją saugiai kontroliuoti.