Sobes.tech
Junior — Middle

Kuidas peatada goroutine'i täitmine, kui oodatud väärtus pole veel saavutatud?

sobes.tech AI

Vastus AI-lt

Go keeles, et gorutina, mis ootab väärtust, kuid see väärtus võib mitte kunagi saabuda, kasutatakse tavaliselt ajapiiranguga kanaleid või tühistamise konteksti.

Näide ajapiirangu kasutamisest select ja time.After abil:

select {
case val := <-ch:
    // väärtus saadi, jätkame tööd
case <-time.After(time.Second * 5):
    // ajapiirang läbi, lõpetame gorutina
}

Teine võimalus on kasutada konteksti (context.Context), mida saab väljastpoolt tühistada:

ctx, cancel := context.WithCancel(context.Background())

go func() {
    select {
    case val := <-ch:
        // töödelda val
    case <-ctx.Done():
        // gorutina lõpetada
    }
}()

// kuskil koodis kutsuge välja cancel(), et lõpetada gorutina

Sel viisil ei jää gorutina lõputult ootama ja saab õigesti lõpetada.