Массивы (списки) в 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, добавлять элементы, изменять их и искать нужные. Это основа для решения многих задач — от учёта фруктов до управления роботами!