Junior — Middle
Είναι πιθανό μια goroutine να διακοπεί ή να σταματήσει από μόνη της;
sobes.tech AI
Απάντηση από AI
Στο Go, η εκτέλεση μιας goroutine μπορεί να τερματίσει αυτόματα σε διάφορες περιπτώσεις:
- Η goroutine ολοκλήρωσε τη λειτουργία της. Μόλις η λειτουργία που τρέχει στη goroutine τελειώσει, η goroutine τερματίζει.
- Panic μέσα στη goroutine. Αν προκύψει panic μέσα στη goroutine και δεν διαχειριστεί, θα τερματίσει απότομα.
- Ακύρωση μέσω του context (context). Αν η goroutine ακούει ένα σήμα ακύρωσης μέσω του
context.Contextκαι το λάβει, μπορεί να τερματίσει σωστά.
Είναι σημαντικό να καταλάβεις ότι οι goroutine δεν διακόπτονται εξωτερικά με βία — πρέπει να υλοποιήσεις μηχανισμό διακοπής μόνος σου, π.χ. μέσω καναλιών ή contexts.
Παράδειγμα χρήσης του context για ακύρωση μιας goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Η goroutine τερματίστηκε")
return
default:
// εργασία
}
}
}(ctx)
// Σε κάποιο σημείο καλούμε cancel()
cancel()
Έτσι, η goroutine τερματίζει είτε από μόνη της στο τέλος της εργασίας της, είτε με σήμα ακύρωσης, αν αυτό προβλέπεται.