Ответ
Массив в Go — это нумерованная последовательность элементов одного типа с фиксированной длиной. Размер массива является частью его типа, то есть [3]int
и [5]int
— это два разных, несовместимых типа.
Основные операции:
-
Объявление и инициализация Размер массива должен быть известен на этапе компиляции.
var arr1 [3]int // Массив из 3-х int, инициализирован нулями arr2 := [3]int{1, 2, 3} // Явное указание размера и значений arr3 := [...]int{4, 5, 6} // Компилятор сам определит размер (3)
-
Доступ к элементам Доступ к элементам осуществляется по индексу, который начинается с 0.
value := arr2[1] // Чтение (value будет 2) arr2[2] = 10 // Запись
-
Получение длины Функция
len()
возвращает длину массива.length := len(arr3) // 3
-
Итерирование Для перебора элементов используется цикл
for ... range
.for index, value := range arr3 { // ... }
-
Сравнение Массивы можно сравнивать с помощью операторов
==
и!=
, если их типы (включая размер) и элементы совпадают. Сравнение происходит поэлементно.a := [...]int{1, 2} b := [...]int{1, 2} c := [...]int{1, 3} fmt.Println(a == b) // true fmt.Println(a == c) // false
-
Передача в функцию (по значению) При передаче массива в функцию всегда создается его полная копия. Изменения копии внутри функции не влияют на исходный массив. Это ключевое отличие от слайсов.
func modify(a [3]int) { a[0] = 100 // Изменяется только копия }
-
Создание среза из массива Из массива можно легко получить срез, который будет ссылаться на данные этого массива.
arr := [...]int{1, 2, 3, 4, 5} slice := arr[1:4] // slice будет [2, 3, 4]
Важно: Из-за фиксированного размера и передачи по значению массивы в Go используются реже, чем слайсы. Обычно их применяют, когда размер коллекции строго определен и не должен меняться, например, для представления RGB-цвета [3]byte
или координат [2]float64
.