Junior — Middle
Czy możliwe jest, że gorutyna zostanie przerwana lub zatrzyma się sama?
sobes.tech AI
Odpowiedź od AI
W Go, wykonanie goroutine może zakończyć się samoistnie w kilku przypadkach:
- Goroutine zakończyła swoją funkcję. Gdy funkcja uruchomiona w goroutine zakończy się, goroutine się kończy.
- Panic wewnątrz goroutine. Jeśli w goroutine wystąpi panic i nie zostanie obsłużony, goroutine zakończy się nagle.
- Anulowanie za pomocą kontekstu (context). Jeśli goroutine nasłuchuje sygnału anulowania przez
context.Contexti go otrzyma, może poprawnie się zakończyć.
Ważne jest, aby zrozumieć, że goroutine nie są przerywane z zewnątrz siłowo — trzeba zaimplementować własny mechanizm zatrzymania, na przykład za pomocą kanałów lub kontekstów.
Przykład użycia kontekstu do anulowania goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine zakończona")
return
default:
// praca
}
}
}(ctx)
// W pewnym momencie wywołujemy cancel()
cancel()
W ten sposób goroutine kończy się albo sama po zakończeniu pracy, albo na sygnał anulowania, jeśli jest to przewidziane.