Sobes.tech
Junior — Middle

Kuidas õigesti peatada goroutine'ide täitmine, kasutades konteksti Go-s?

sobes.tech AI

Vastus AI-lt

Õige goroutine'ide lõpetamiseks Go keeles kasutatakse sageli context paketti. Loobakse kontekst koos tühistamise võimalusega (context.WithCancel), mis edastatakse goroutine'ile. Goroutine'i sees kontrollitakse perioodiliselt konteksti olekut <-ctx.Done() kaudu. Kui tühistamise funktsioon kutsutakse välja, sulgub Done() kanal ja goroutine saab õigesti lõpetada.

Näide:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine lõpetatud")
            return
        default:
            // töö tegemine
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // pärast teatud aega goroutine lõpetamine
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // et goroutine saaks lõpetada
}

See lähenemine võimaldab turvaliselt ja kontrollitult lõpetada goroutine'id ilma ohtlike meetodite kasutamiseta.