Sobes.tech
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 τερματίζει είτε από μόνη της στο τέλος της εργασίας της, είτε με σήμα ακύρωσης, αν αυτό προβλέπεται.