У меня довольно простой вопрос, но я не могу найти ответ нигде. Я итерация ряд ломтиков, как это:Показатели цикла цикла для диапазона на фрагменте
for index, arg := range os.Args[1:] {
s += fmt.Sprintf("%d: %s", index, arg)
}
Как я понимаю range
перебирает кусочком, и index
создается из диапазона, и это с нуля. Я получаю результат:
0: argument_1
1: argument_2
// etc.
Но это не то, что я ожидаю, - мне нужно range
сохранить показатели этого среза, поэтому мой результат выглядит следующим образом:
1: argument_1
2: argument_2
// etc.
Самый очевидный способ для достижения этой цели является добавление shift
на индекс в цикле:
shift := 1
for index, arg := range os.Args[shift:] {
index += shift
s += fmt.Sprintf("%d: %s", index, arg)
}
Но мне было интересно, есть ли более «Go-иш» способ сделать это, а также, как сохранить показатели при создании среза в Go как это?
В вашем примере 'shift' вы добавляете 1 к индексу каждый раз в дополнение к обычному приращению цикла for. Разве это не решило бы чтение только аргументов 1, 3, 5 и т. Д.? –
@MateiRadu Нет, индекс переназначается для каждого цикла, поэтому код работает. Вероятно, это выглядело бы лучше с новой переменной типа «originalIndex: = index + 1», хотя –
@FranckJeannin Спасибо за объяснение, она очистила мои сомнения в том, как работает «range». –