2014-06-29 16 views
8

Ho appena iniziato a imparare Go oggi e sono rimasto bloccato sugli ambiti variabili.Golang: scope variabile all'interno delle istruzioni if ​​

Alla fine ho confuso su come aggirare il fatto che non è possibile creare una variabile all'interno di un'istruzione if e usarla in seguito.

Questo è il mio codice. Il problema è che new1 non può essere creato prima dell'istruzione if perché la sua dimensione dipende dal risultato dell'istruzione if, e creandolo all'interno dell'istruzione if non posso usarlo dopo che l'istruzione if termina.

if len(array1)>len(array2) { 
    new1 := make([]string,0,len(array1)) 
    mc := Array2Map_string(array1) 
    for _,tok :=range array2 { 
     _, ok := mc[tok] 
     if ok { 
      new1[len(new1)]=tok 
      } 
     } 
    } else { 
    new1 := make([]string,0,len(array2)) 
    mc := Array2Map_string(array2) 
    for _,tok :=range array1 { 
     _, ok := mc[tok] 
     if ok { 
      new1[len(new1)]=tok 
      } 
     } 
    } 
new2 := make([]string,0,len(new1)) 
copy(new2, new1) 

L'unica cosa che mi viene in mente è quello di fare qualcosa di simile

var pointlessvariable uint 
if len(array1)>len(array2) { 
pointlessvariable=len(array1) 
} else { 
pointlessvariable=len(array2) 
} 
var new1 = make([]string,0,pointlessvariable) 
if len(array1)>len(array2) { 
... 

Per essere onesti, se questo è veramente la soluzione, allora non credo che voglio usare Golang dopo tutto.

Quindi qual è il modo migliore per risolvere questo?

risposta

10

È possibile dichiarare new1 prima del blocco if e utilizzare make all'interno:

var new1 []string 

if len(array1)>len(array2) { 
    new1 = make([]string, 0, len(array1)) 
    // instructions ... 
} else { 
    new1 = make([]string, 0, len(array2)) 
    // other instructions ... 
} 

new2 := make([]string, 0, len(new1)) 
copy(new2, new1) 
+0

OK, grazie. Quindi la matrice è effettivamente creata sulla prima riga, o lo rende solo pronto per essere creato e avere un ambito più globale? – Alasdair

+0

Non è un array ma una fetta. Viene creato sulla prima riga, ma la sua lunghezza è 0 finché non si usa 'make' per definire la sua lunghezza (e capacità). Ma puoi ancora usare una slice di dimensioni zero con 'append' per esempio:' make' non è l'unica soluzione. – julienc

+0

Confuso :) grazie – Alasdair

Problemi correlati