Sobes.tech
Middle+

Τι είναι ένα κανάλι στο Go; Για τι χρησιμοποιούνται τα κανάλια;

sobes.tech AI

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

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

Τα κανάλια δηλώνονται με την καθορισμό του τύπου των δεδομένων που μεταδίδονται, για παράδειγμα:

ch := make(chan int) // κανάλι για μετάδοση ακέραιων αριθμών

Οι βασικές λειτουργίες με κανάλια:

  • Αποστολή τιμής: ch <- value
  • Λήψη τιμής: value := <-ch

Τα κανάλια χρησιμοποιούνται για:

  • Συγχρονισμό goroutines
  • Μεταφορά δεδομένων μεταξύ goroutines
  • Οργάνωση αγωγών επεξεργασίας δεδομένων

Παράδειγμα:

package main

import (
	"fmt"
	"time"
)

func worker(ch chan int) {
	for val := range ch {
		fmt.Println("Λήφθηκε:", val)
	}
}

func main() {
	ch := make(chan int)
	go worker(ch)

	for i := 0; i < 5; i++ {
		ch <- i
	}
	close(ch) // κλείνουμε το κανάλι ώστε να τερματίσει ο worker
	time.Sleep(time.Second)
}

Σε αυτό το παράδειγμα, το κανάλι χρησιμοποιείται για τη μετάδοση αριθμών από το κύριο goroutine στον worker, ο οποίος τους εμφανίζει.