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("λειτουργία ακυρώθηκε ή υπερέβη το χρονικό όριο")
}