2010-05-23 13 views
16

Ci scusiamo per la domanda di sintassi del principiante.come allocare array di canali in go

Come si fa a creare una serie di canali?

var c0 chan int = make(chan int); 
    var c1 chan int = make(chan int); 
    var c2 chan int = make(chan int); 
    var c3 chan int = make(chan int); 
    var c4 chan int = make(chan int); 

Cioè, sostituire le cinque righe precedenti in una matrice di canali di dimensione 5?

Molte grazie.

risposta

38

La dichiarazione var chans [5]chan int assegnerebbe una matrice di dimensione 5, ma tutti i canali sarebbero nil.

Un modo potrebbe essere quello di utilizzare una fetta letterale:

var chans = []chan int { 
    make(chan int), 
    make(chan int), 
    make(chan int), 
    make(chan int), 
    make(chan int), 
} 

Se non si desidera ripetere se stessi, si dovrebbe scorrere su di esso e inizializzare ogni elemento:

var chans [5]chan int 
for i := range chans { 
    chans[i] = make(chan int) 
} 
+0

Perché è la tua soluzione migliore del succinto e idiomatico 'chans: = make ([] chan int, 5)' di Chickencha? – peterSO

+12

Se i canali non sono allocati in modo esplicito con 'make (chan int)', saranno predefiniti a 'nil'. –

Problemi correlati