Немного запутать насчет итерационных значений golang for loop - PullRequest
0 голосов
/ 05 июня 2018

Этот вопрос относится к этому и этому ответу

Все эти вопросы и ответы имеют для меня смысл, кроме одной мелочи.

Если вторым значением цикла for является [i], то чем отличаются a[i] от цикла for и a[i], как мы пишем?Похоже, то же самое, но это не так, верно?

Пожалуйста, помогите мне разобраться с этим.Спасибо, ребята!

1 Ответ

0 голосов
/ 05 июня 2018

Когда вы пишете:

a := make([]int, 3)

a[0], a[1], a[2] = 1, 2, 3

for i, val := range a {
    println(a[i], "vs.", val)
    println(&a[i], "vs.", &val)
}

Переменной val присваивается копия значения в a[i].

Это в основном то же самоекак это делается так:

var val int
for i := range a {
    val = a[i]
    println(a[i], "vs.", val)
    println(&a[i], "vs.", &val)
}

Итак, в зависимости от того, что вы делаете, тогда:

Это похоже на одно и то же, но это не так, верно?

Если вы используете переменную для чтения значения, то это то же самое.

Но если вы присваиваете ей значение, принимаете его значение указателя и т. Д., это не .

...