Sobes.tech
Middle+

Cos'è un canale in Go? A cosa servono i canali?

sobes.tech AI

Risposta dell'AI

In Go, un canale (channel) è un meccanismo per trasmettere dati tra goroutine (thread leggeri). I canali forniscono una comunicazione sicura e sincronizzata, permettendo alle goroutine di scambiarsi valori senza usare variabili condivise o blocchi.

I canali vengono dichiarati specificando il tipo di dati trasmessi, ad esempio:

ch := make(chan int) // canale per trasmettere numeri interi

Operazioni principali sui canali:

  • Inviare un valore: ch <- value
  • Ricevere un valore: value := <-ch

I canali sono usati per:

  • Sincronizzare le goroutine
  • Trasmettere dati tra goroutine
  • Organizzare pipeline di elaborazione dati

Esempio:

package main

import (
	"fmt"
	"time"
)

func worker(ch chan int) {
	for val := range ch {
		fmt.Println("Ricevuto:", val)
	}
}

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

	for i := 0; i < 5; i++ {
		ch <- i
	}
	close(ch) // chiudiamo il canale affinché il worker termini
	time.Sleep(time.Second)
}

In questo esempio, il canale viene usato per trasmettere numeri dalla goroutine principale al worker, che li stampa.