🐹 Go

Массивы (списки) в Go 1.21: подробное руководство

Массивы (списки) в Go

Введение: зачем нужны списки?

Представь, что ты собираешься в поход и тебе нужно записать все вещи, которые ты берёшь с собой: палатку, спальник, еду, воду... Если записывать каждую вещь в отдельную переменную, то код станет очень длинным и запутанным. Вместо этого программисты используют массивы (списки) — это как коробка с ячейками, в каждой из которых хранится одно значение. В языке Go такие «коробки» называются слайсами (срезами) — это удобные списки, которые можно менять (добавлять, удалять элементы).

Основной синтаксис

Слайс в Go создаётся так: сначала пишем тип элементов (например, string для текста или int для чисел), потом в квадратных скобках — ничего, а затем в фигурных скобках перечисляем значения.

// Список фруктов
фрукты := []string{"яблоко", "банан", "груша"}

// Список чисел (высота в метрах)
высоты := []int{100, 200, 150}

Чтобы обратиться к элементу списка, используй индекс — номер ячейки. Нумерация начинается с 0:

фрукты := []string{"яблоко", "банан", "груша"}
fmt.Println(фрукты[0]) // яблоко
fmt.Println(фрукты[2]) // груша

Изменить элемент можно так же, по индексу:

фрукты[1] = "апельсин"
fmt.Println(фрукты) // [яблоко апельсин груша]

Чтобы узнать длину списка, используй len():

fmt.Println(len(фрукты)) // 3

Добавить новый элемент в конец списка помогает append():

фрукты = append(фрукты, "киви")
fmt.Println(фрукты) // [яблоко апельсин груша киви]

Разбор типичных задач

Задача 1: Фрукты (список поставок)

Ты владелец магазина. Каждый день ты добавляешь фрукты в список. В конце недели нужно вывести все фрукты.

package main

import "fmt"

func main() {
    // Создаём пустой список
    фрукты := []string{}

    // Добавляем фрукты (как будто каждый день)
    фрукты = append(фрукты, "яблоко")
    фрукты = append(фрукты, "банан")
    фрукты = append(фрукты, "груша")
    фрукты = append(фрукты, "апельсин")

    // Выводим итоговый список
    fmt.Println("Список фруктов за неделю:")
    for i := 0; i < len(фрукты); i++ {
        fmt.Println(i+1, фрукты[i])
    }
}

Вывод:

Список фруктов за неделю:
1 яблоко
2 банан
3 груша
4 апельсин

Задача 2: Робот-сортировщик (поиск по условию)

Робот проверяет серийные номера деталей. Нужно найти все номера, которые больше 100.

package main

import "fmt"

func main() {
    // Список серийных номеров
    номера := []int{45, 120, 89, 200, 34, 150}

    fmt.Println("Детали для следующего этапа (номер > 100):")
    for i := 0; i < len(номера); i++ {
        if номера[i] > 100 {
            fmt.Println(номера[i])
        }
    }
}

Вывод:

Детали для следующего этапа (номер > 100):
120
200
150

Задача 3: Запас материалов (изменение элемента)

В списке продуктов хлеб записан на втором месте (индекс 1). Нужно удвоить его количество.

package main

import "fmt"

func main() {
    // Количество продуктов: [мука, хлеб, молоко]
    запасы := []int{10, 5, 8}

    // Удваиваем количество хлеба (индекс 1)
    запасы[1] = запасы[1] * 2

    fmt.Println("Обновлённые запасы:", запасы)
    // Вывод: [10 10 8]
}

Частые ошибки новичков

  • Выход за границы списка
    Если в списке 3 элемента, индексы 0, 1, 2. Обращение к индексу 3 вызовет ошибку. Всегда проверяй len().
  • Забыть присвоить результат append
    append возвращает новый список. Нужно писать список = append(список, элемент), иначе элемент не добавится.
  • Путаница индексов при цикле
    Если пишешь for i := 1; i <= len(список); i++ — пропустишь первый элемент (индекс 0) и выйдешь за границу. Правильно: for i := 0; i < len(список); i++.

Итоговый пример: Юный альпинист

Вася записывает высоту каждый день. Нужно вывести дни, когда он был выше 200 метров.

package main

import "fmt"

func main() {
    // Высоты по дням
    высоты := []int{150, 220, 180, 250, 190, 210}

    fmt.Println("Дни, когда Вася был выше 200 м:")
    for i := 0; i < len(высоты); i++ {
        if высоты[i] > 200 {
            // День = индекс + 1 (чтобы считать с 1, а не с 0)
            fmt.Println("День", i+1, "- высота", высоты[i], "м")
        }
    }
}

Вывод:

Дни, когда Вася был выше 200 м:
День 2 - высота 220 м
День 4 - высота 250 м
День 6 - высота 210 м

Теперь ты знаешь, как хранить списки данных в Go, добавлять элементы, изменять их и искать нужные. Это основа для решения многих задач — от учёта фруктов до управления роботами!