Sobes.tech
Junior

Τι είναι το πλαίσιο στο Go; Για τι είναι χρήσιμο, ποιοι τύποι υπάρχουν, ποια μοτίβα εργασίας με αυτό υπάρχουν;

sobes.tech AI

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

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

Για τι χρησιμοποιείται:

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

Τύποι πλαισίων:

  • context.Background() — ριζικό, κενό πλαίσιο.
  • context.TODO() — χρησιμοποιείται όταν το πλαίσιο δεν έχει ακόμη οριστεί.
  • Πλαίσια με ακύρωση (WithCancel), με χρονικό όριο (WithTimeout), με προθεσμία (WithDeadline), με τιμές (WithValue).

Μοτίβα εργασίας:

  • Μεταβίβαση του πλαισίου ως πρώτο παράμετρο στις συναρτήσεις.
  • Μην αποθηκεύετε το πλαίσιο σε δομές, αλλά το περνάτε ρητά.
  • Ελέγξτε την ακύρωση μέσω <-ctx.Done().

Παράδειγμα:

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

select {
case <-time.After(time.Second * 10):
    fmt.Println("λειτουργία ολοκληρώθηκε")
case <-ctx.Done():
    fmt.Println("λειτουργία ακυρώθηκε ή υπερέβη το χρονικό όριο")
}