Sobes.tech
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.