Gocanali


introduzione

Un canale contiene valori di un determinato tipo. I valori possono essere scritti su un canale e letti da esso, e circolano all'interno del canale in ordine first-in-first-out. Vi è una distinzione tra i canali bufferizzati, che possono contenere più messaggi e canali non bufferizzati, che non possono. I canali vengono in genere utilizzati per comunicare tra le goroutine, ma sono anche utili in altre circostanze.

Sintassi

  • make (chan int) // crea un canale unbuffered
  • make (chan int, 5) // crea un canale bufferizzato con una capacità di 5
  • chiudi (ch) // chiude un canale "ch"
  • ch <- 1 // scrivi il valore di 1 in un canale "ch"
  • val: = <-ch // legge un valore dal canale "ch"
  • val, ok: = <-ch // sintassi alternativa; ok è un bool che indica se il canale è chiuso

Osservazioni

Un canale che tiene la struct vuota make(chan struct{}) è un messaggio chiaro all'utente che nessuna informazione è trasmessa sul canale e che è puramente usata per la sincronizzazione.

Per quanto riguarda i canali non bufferizzati, una scrittura di canale si bloccherà fino a quando non si verificherà una lettura corrispondente da un'altra goroutine. Lo stesso vale per un blocco di lettura del canale in attesa di uno scrittore.

canali Esempi correlati