Цикл for
в Go аналогичен - но не тот же самый - что в C. Он объединяет for
и while
, и не существует do-while
. Есть три формы, только одна из которых имеет точки с запятой.
// Как C for
for init; condition; post { }
// Как C while
for condition { }
// Как C for(;;)
for { }
Короткие объявления позволяют легко объявить переменную индекса прямо в цикле.
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
Если вы проходите в цикле по массиву, срезу, строке или карте, или читаете из канала, условие range
может управлять циклом.
for key, value := range oldMap {
newMap[key] = value
}
Если вам нужен только первый элемент в диапазоне (ключ или индекс), отбросьте второй:
for key := range m {
if key.expired() {
delete(m, key)
}
}
Если вам нужен только второй элемент в диапазоне (значение), используйте пустой идентификатор, подчеркивание, чтобы отбросить первый:
sum := 0
for _, value := range array {
sum += value
}
Пустой идентификатор имеет множество применений.
Для строк range
делает большую часть работы за вас, выделяя отдельные Unicode символы путем разбора UTF-8. Ошибочные кодировки занимают один байт и производят замещающующий rune U+FFFD. (Имя (со связанным встроенным типом) rune
- это терминология Go для единичного Unicode кодированного символа.) Цикл
// \x80 это невалидное UTF-8 кодирование
for pos, char := range "日本\x80語" {
fmt.Printf("character %#U starts
at byte position %d\n", char, pos)
}
печатает
character U+65E5 '日' starts at byte position 0
character U+672C '本' starts at byte position 3
character U+FFFD '�' starts at byte position 6
character U+8A9E '語' starts at byte position 7
Наконец, в Go нет оператора запятой, а также ++
и --
являются заявлениями, а не выражениями. Таким образом, если вы хотите запустить несколько переменных в for
Вы должны использовать параллельное присваивание (хотя это исключает ++
и --
).
// Reverse a
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
a[i], a[j] = a[j], a[i]
}
Читайте также:
- Эффективный Go: управляющие структуры, оператор if
- Эффективный Go: повторная декларация и переназначение
- Эффективный Go: точки с запятой
Комментариев нет:
Отправить комментарий