Ответ 1
Что случилось с
i := 1
for _, v := range array {
// do something
i += 4
}
если вы хотите i-значения, отличные от индексов, или если вы хотите пропустить индексы,
for i := 1; i < len(array); i += 4 {
v := array[i]
}
?
Можно ли перебирать индексы массива в языке Go и выбирать не все индексы, но вызывать некоторый период (например, 1, 2, 3.
Например,
for i, v := range array {
//do something with i,v
}
выполняет итерацию по всем индексам в массиве
Что я хочу знать, есть ли шанс иметь что-то вроде этого
for i:=1, v := range array {
//do something with i,v
i += 4
}
Что случилось с
i := 1
for _, v := range array {
// do something
i += 4
}
если вы хотите i-значения, отличные от индексов, или если вы хотите пропустить индексы,
for i := 1; i < len(array); i += 4 {
v := array[i]
}
?
Вы ищете абстракцию, которая не существует в Голанге. Go "прост" по дизайну. Конечно, простое само по себе является очень относительным и субъективным термином. Например, для некоторых было бы просто:
// This is not real Go code
for index, value := range(array, stride = 4, start = 1) {
...
}
Это потому, что он сообщает компилятору, что делать, а не как это сделать - окончательная абстракция - как может измениться без изменения. Но как абстрагироваться. Именно по этой причине некоторые другие предпочли бы:
// This *is* real Go code
start := 1 // we start not at 0 but at one, just for fun
stride := 4 // we skip 3 between this and the next one of interest
for i: = start; i < len(array); i += stride {
...
}
Этот код говорит вам, как что-то делается, и как побочный эффект, вы должны понимать, что делается. Маленькая абстракция - но это инженерный компромисс за то, что он был несколько быстрым и несколько прост. Большинство компромиссов в области Go ошибаются на стороне простоты и скорости.
Go позволяет создавать такую абстракцию, хотя и с небольшим усилием.