Un buon modo di pensare a canali è come tubi con due estremità. Un'estremità è dove gli eventi fluiscono e l'altro dove defluiscono. Quindi dichiarare un canale, ad es.
var c = make(chan int)
crea un canale nel suo insieme - cioè con entrambe le estremità. Viceversa,
func consume(c <-chan int) {
...
}
definisce una funzione con un parametro di ingresso del canale - cioè l'estremità leggibile di un canale, e
func generate(c chan<- int) {
...
}
definisce una funzione con un parametro di uscita del canale - cioè l'estremità scrivibile di un canale . Entrambe queste funzioni possono avere l'intero canale passato come parametro effettivo o solo la fine di cui hanno bisogno.
Lo stesso principio generale si applica quando i canali vengono utilizzati come variabili locali o come campi nelle strutture.
È buona norma utilizzare la sintassi di fine canale laddove possibile, perché il compilatore sarà in grado di controllare in modo più approfondito di aver scritto ciò che si desiderava.
È interessante notare che il linguaggio di programmazione occam ha anche una sintassi equivalente per indicare quale fine di un canale è quale.
fonte
2012-12-28 23:59:17
@ david-faux, si noti inoltre che è possibile utilizzare solo "tick: = time.Tick (1e8)' e fare in modo che il compilatore derivi automaticamente il tipo corretto per "tick". Questo approccio riduce anche il disordine. – kostix