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