https://golang.org/ref/spec#For_range
Для операторов с диапазон предложение
Для массива, указателя на массив или значения слайса a значения итерации индексапроизводится в порядке возрастания, начиная с индекса элемента 0. Если присутствует не более одной переменной итерации, цикл диапазона создает значения итерации от 0 до len (a) -1 и не индексируется в массив или сам фрагмент.Для нулевого среза число итераций равно 0.
Согласно спецификации, итерация по линейной структуре данных (массиву, срезу или строке) в Go приведет к тому, что каждый из элементов всегда будет впорядок увеличения индекса.
for i, v := range []int{11, 22, 33, 44} {
fmt.Println(i, v)
}
Но дело в том, что я не могу найти в спецификации гарантию того, что
это предложение с переборами диапазона с неявной итерацией индексаЗначение также всегда будет сохранять один и тот же порядок:
for _, v := range []int{11, 22, 33, 44} {
fmt.Println(v)
}
Будут ли эти два примера, приведенные выше, всегда работать в одном и том же порядке?
Я предполагаю, что они делают, но у меня нет 'обещание еще не услышано.
Как работает for ... range
, когда значение итерации индекса представлено пустым идентификатором (подчеркивание _
)?