Sobes.tech
Junior — Middle

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

sobes.tech AI

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

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

Παράδειγμα χρήσης καναλιού για τη μεταφορά αριθμών από μια goroutine σε άλλη:

package main

import (
    "fmt"
    "time"
)

func producer(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // αποστολή δεδομένων στο κανάλι
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // κλείσιμο του καναλιού μετά την αποστολή όλων των δεδομένων
}

func consumer(ch chan int) {
    for val := range ch { // λήψη δεδομένων από το κανάλι
        fmt.Println("Λήφθηκε:", val)
    }
}

func main() {
    ch := make(chan int)
    go producer(ch)
    consumer(ch)
}

Εδώ, ο producer στέλνει αριθμούς στο κανάλι, και ο consumer τους διαβάζει. Τα κανάλια διασφαλίζουν ασφαλή μεταφορά δεδομένων χωρίς την ανάγκη για mutex ή άλλα μηχανισμούς συγχρονισμού.