Właśnie rozpocząłem naukę Go dzisiaj i utknąłem na zmiennych zakresach.Golang: zakres zmiennych wewnątrz instrukcji if
Ostatecznie byłem zdezorientowany tym, jak obejść fakt, że nie mogę utworzyć zmiennej wewnątrz instrukcji if i użyć jej później.
To jest mój kod. Problem polega na tym, że new1 nie może zostać utworzony przed instrukcją if, ponieważ jego rozmiar jest zależny od wyniku instrukcji if, a tworzenie go wewnątrz instrukcji if nie może go użyć po zakończeniu instrukcji if.
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)
Jedyne co mogę myśleć o to, aby zrobić coś jak
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) {
...
Aby być całkiem szczery, jeśli jest to naprawdę rozwiązanie to nie sądzę, chcę użyć Golang po wszystkim.
Jaki jest najlepszy sposób rozwiązania tego problemu?
OK, dziękuję. Czy ta macierz jest rzeczywiście tworzona w pierwszym wierszu, czy też tylko sprawia, że jest ona gotowa do stworzenia i ma bardziej globalny zasięg? – Alasdair
To nie jest tablica, ale kawałek. Jest tworzony w pierwszym wierszu, ale jego długość wynosi 0, dopóki nie użyjesz 'make' do zdefiniowania jego długości (i pojemności). Ale nadal możesz użyć wycinka o rozmiarze zerowym z 'append' na przykład:' make' nie jest jedynym rozwiązaniem. – julienc
Mylące :) dzięki – Alasdair