Junior — Middle
Πώς διασφαλίζεται η ασφαλής εγγραφή δεδομένων σε ένα κανάλι από πολλές goroutines χωρίς χρήση κλειδώματος;
sobes.tech AI
Απάντηση από AI
Στη Go, για να γράψετε με ασφάλεια δεδομένα σε ένα κανάλι από πολλαπρα goroutines χωρίς να χρησιμοποιείτε κλειδώματα, συνήθως αρκεί να χρησιμοποιήσετε το ίδιο το κανάλι, καθώς τα κανάλια στη Go είναι ασφαλή για ταυτόχρονες λειτουργίες από προεπιλογή.
Παράδειγμα:
ch := make(chan int)
// Γράψιμο στο κανάλι από πολλαπρα goroutines
for i := 0; i < 5; i++ {
go func(val int) {
ch <- val // ασφαλής εγγραφή
}(i)
}
// Ανάγνωση από το κανάλι
for i := 0; i < 5; i++ {
fmt.Println(<-ch)
}
Αν θέλετε να διασφαλίσετε ότι η εγγραφή δεν θα μπλοκαριστεί, μπορείτε να χρησιμοποιήσετε ένα buffer-αρισμένο κανάλι. Με αυτόν τον τρόπο, δεν χρειάζονται χειροκίνητα κλειδώματα, καθώς το κανάλι παρέχει συγχρονισμό.