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?
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
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
Confuso :) grazie – Alasdair