Какие основные операции доступны для массивов в Go?

Ответ

Массив в Go — это нумерованная последовательность элементов одного типа с фиксированной длиной. Размер массива является частью его типа, то есть [3]int и [5]int — это два разных, несовместимых типа.

Основные операции:

  1. Объявление и инициализация Размер массива должен быть известен на этапе компиляции.

    var arr1 [3]int // Массив из 3-х int, инициализирован нулями
    arr2 := [3]int{1, 2, 3} // Явное указание размера и значений
    arr3 := [...]int{4, 5, 6} // Компилятор сам определит размер (3)
  2. Доступ к элементам Доступ к элементам осуществляется по индексу, который начинается с 0.

    value := arr2[1] // Чтение (value будет 2)
    arr2[2] = 10     // Запись
  3. Получение длины Функция len() возвращает длину массива.

    length := len(arr3) // 3
  4. Итерирование Для перебора элементов используется цикл for ... range.

    for index, value := range arr3 {
        // ...
    }
  5. Сравнение Массивы можно сравнивать с помощью операторов == и !=, если их типы (включая размер) и элементы совпадают. Сравнение происходит поэлементно.

    a := [...]int{1, 2}
    b := [...]int{1, 2}
    c := [...]int{1, 3}
    fmt.Println(a == b) // true
    fmt.Println(a == c) // false
  6. Передача в функцию (по значению) При передаче массива в функцию всегда создается его полная копия. Изменения копии внутри функции не влияют на исходный массив. Это ключевое отличие от слайсов.

    func modify(a [3]int) {
        a[0] = 100 // Изменяется только копия
    }
  7. Создание среза из массива Из массива можно легко получить срез, который будет ссылаться на данные этого массива.

    arr := [...]int{1, 2, 3, 4, 5}
    slice := arr[1:4] // slice будет [2, 3, 4]

Важно: Из-за фиксированного размера и передачи по значению массивы в Go используются реже, чем слайсы. Обычно их применяют, когда размер коллекции строго определен и не должен меняться, например, для представления RGB-цвета [3]byte или координат [2]float64.