Sobes.tech
Junior — Middle

Πώς πραγματοποιείται η ανταλλαγή δεδομένων μεταξύ συστατικών ή συστημάτων χωρίς να τα μπλοκάρει και χωρίς να περιμένει απάντηση;

sobes.tech AI

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

Η ανταλλαγή δεδομένων χωρίς μπλοκάρισμα και αναμονή για απάντηση στο Go πραγματοποιείται συνήθως με τη χρήση καναλιών (channels) και goroutines. Τα κανάλια επιτρέπουν την ασύγχρονη μετάδοση δεδομένων μεταξύ goroutines, και η μη μπλοκαρισμένη ανταλλαγή επιτυγχάνεται με μη μπλοκαριστικές λειτουργίες στα κανάλια, π.χ., μέσω select με μια default κλάση.

Παράδειγμα μη μπλοκαριστικής αποστολής και λήψης δεδομένων μέσω ενός καναλιού:

ch := make(chan int)

// Μη μπλοκαριστική αποστολή
select {
case ch <- 42:
    fmt.Println("Αποστάλθηκε")
default:
    fmt.Println("Το κανάλι είναι γεμάτο, η αποστολή παραλείφθηκε")
}

// Μη μπλοκαριστική λήψη
select {
case val := <-ch:
    fmt.Println("Λήφθηκε", val)
default:
    fmt.Println("Δεν υπάρχουν δεδομένα για λήψη")
}

Έτσι, τα συστατικά μπορούν να ανταλλάσσουν δεδομένα χωρίς να περιμένουν, κάτι που αυξάνει την απόδοση και την ανταπόκριση του συστήματος.