Зарегистрируйтесь, чтобы продолжить обучение

Цикл for и срезы Основы Go

Циклы в Go — основной инструмент для обхода срезов и работы с их элементами. Для этого можно использовать классический for с индексом, который даёт полный контроль и позволяет напрямую изменять значения, или лаконичный range, упрощающий перебор элементов и повышающий читаемость кода.

Обход среза по индексу

names := []string{"Alice", "Bob", "Charlie"}

for i := 0; i < len(names); i++ {
    fmt.Println(names[i])
}
  • Полный контроль над индексами.
  • Подходит для изменения значений:

    nums := []int{1, 2, 3}
    
    for i := 0; i < len(nums); i++ {
        nums[i] *= 2
    }
    fmt.Println(nums) // [2 4 6]
    

Обход среза с помощью range

langs := []string{"Go", "Rust", "Python"}

for i, lang := range langs {
    fmt.Printf("langs[%d] = %s\n", i, lang)
}
  • Цикл range возвращает индекс и копию значения.
  • Упрощает синтаксис.
  • Хорошо читается.
  • Подходит для большинства задач обхода

Если не нужен индекс:

for _, lang := range langs {
    fmt.Println(lang)
}

Если не нужно значение:

for i := range langs {
    fmt.Println(i)
}

Изменение значений в range

Важно: переменная lang — это копия значения. Изменения не повлияют на оригинальный срез:

for _, lang := range langs {
    lang = strings.ToUpper(lang) // изменится копия, не оригинал
}
fmt.Println(langs) // => ["Go" "Rust" "Python"]

Чтобы изменить элементы, нужно использовать индекс:

for i := range langs {
    langs[i] = strings.ToUpper(langs[i])
}
fmt.Println(langs) // => ["GO" "RUST" "PYTHON"]

Вывод

Способ Изменение значений Контроль над порядком Краткость
По индексу Да Да Нет
Через range Только через индекс Нет Да

Цикл range — стандарт для чтения, for с индексом — для изменения.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff