Middle
Τι είναι το πλαίσιο στο Go; Για τι χρησιμοποιείται; Πώς λειτουργεί η ακύρωση με χρονικό όριο;
sobes.tech AI
Απάντηση από AI
Στα Go, το context είναι ένα πακέτο και μια έννοια για τη διαχείριση του χρόνου ζωής των λειτουργιών, τη μεταφορά σημάτων ακύρωσης και τον καθορισμό χρονικών ορίων μεταξύ goroutines.
Οι βασικές εργασίες του context:
- Ακύρωση λειτουργιών (π.χ., σε περίπτωση timeout ή ακύρωσης από τον χρήστη),
- Μεταφορά τιμών (π.χ., ID αιτήματος) μέσω της αλυσίδας κλήσεων,
- Ορισμός χρονικών ορίων (timeouts).
Η ακύρωση με timeout λειτουργεί ως εξής:
- Δημιουργείται ένα context με χρονικό όριο ή timeout, π.χ.,
context.WithTimeout. - Όταν λήξει ο χρόνος, το context ακυρώνεται αυτόματα.
- Το goroutine που ακούει αυτό το context λαμβάνει ένα σήμα ακύρωσης μέσω του καναλιού
Done(). - Το 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 δευτερόλεπτα αν δεν ολοκληρωθεί νωρίτερα.