Junior — Middle
Kaip valdyti goroutine būseną ir pabaigą Go kalboje?
sobes.tech AI
Atsakymas iš AI
Go dažnai valdymas būna atliekamas naudojant kanalus (channels) ir kontekstus (context).
- ** Kanalai ** leidžia perduoti signalus tarp goroutine'ų. Pavyzdžiui, galima sukurti kanalą, kuris praneštų apie poreikį baigti:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Baigia goroutine
default:
// Atlieka darbą
}
}
}()
// Norint sustabdyti goroutine:
close(stop)
- ** Kontekstų paketas ** suteikia patogų būdą valdyti goroutine gyvavimo laiką, ypač dirbant su užklausomis ar ilgalaikėmis operacijomis:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Baigia goroutine
default:
// Darbas
}
}
}(ctx)
// Norint sustabdyti:
cancel()
Taip goroutine klausosi signalų per kanalus ar kontekstus ir teisingai užbaigia darbą, kai gauna signalą.