Sobes.tech
Middle

Τι είναι το πλαίσιο στο Go; Για τι χρησιμοποιείται; Πώς λειτουργεί η ακύρωση με χρονικό όριο;

sobes.tech AI

Απάντηση από AI

Στα Go, το context είναι ένα πακέτο και μια έννοια για τη διαχείριση του χρόνου ζωής των λειτουργιών, τη μεταφορά σημάτων ακύρωσης και τον καθορισμό χρονικών ορίων μεταξύ goroutines.

Οι βασικές εργασίες του context:

  • Ακύρωση λειτουργιών (π.χ., σε περίπτωση timeout ή ακύρωσης από τον χρήστη),
  • Μεταφορά τιμών (π.χ., ID αιτήματος) μέσω της αλυσίδας κλήσεων,
  • Ορισμός χρονικών ορίων (timeouts).

Η ακύρωση με timeout λειτουργεί ως εξής:

  1. Δημιουργείται ένα context με χρονικό όριο ή timeout, π.χ., context.WithTimeout.
  2. Όταν λήξει ο χρόνος, το context ακυρώνεται αυτόματα.
  3. Το goroutine που ακούει αυτό το context λαμβάνει ένα σήμα ακύρωσης μέσω του καναλιού Done().
  4. Το goroutine πρέπει να χειριστεί σωστά την ακύρωση (π.χ., να διακόψει την εργασία και να ελευθερώσει πόρους).

Παράδειγμα:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("Ολοκλήρωση λειτουργίας")
case <-ctx.Done():
    fmt.Println("Λειτουργία ακυρώθηκε ή έληξε ο χρόνος")
}

Εδώ, η λειτουργία θα διακοπεί μετά από 2 δευτερόλεπτα αν δεν ολοκληρωθεί νωρίτερα.