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

Что такое массив в Go?

Массив в Go представляет собой фиксированную коллекцию элементов одинакового типа, расположенных в непрерывной области памяти. Элементы массива индексируются начиная с нуля, и длина массива является частью его типа. Это означает, что массивы разной длины рассматриваются как разные типы.
Здесь мы объявляем массив с именем arr, состоящий из четырёх целых чисел (int). Первый элемент имеет индекс 0, второй — 1 и так далее.

<div>Массивы против срезов</div>

И массивы, и срезы используются для хранения множества значений в одной переменной. Основное различие заключается в том, что массивы имеют фиксированную длину, тогда как срезы обладают динамической длиной. Срезы реализованы поверх массивов.

Создание массива

Создание массива осуществляется с использованием ключевого слова var, за которым следуют название массива, его длина и тип элементов. Общий синтаксис выглядит следующим образом:
Пример объявления и инициализации массива:
Также возможно объявление и инициализация массива в одну строку:

Доступ к элементам массива

Доступ к элементам массива выполняется посредством индекса элемента. Индексация начинается с нуля, а последний элемент имеет индекс равный длине массива минус единица.

<div>Итерация по массиву</div>

Проход по элементам массива возможен с помощью цикла for. Индекс первого элемента равен нулю, последнего — длине массива минус один.
Альтернативный способ — использование оператора range, который возвращает индекс и значение каждого элемента:

Длина массива

Длина массива доступна через встроенную функцию len():
Так как массивы имеют фиксированный размер, изменить их длину после создания невозможно.

Работа с фрагментами массива

Фрагментация массива позволяет получать подмножества элементов массива. Для фрагментации используется следующий синтаксис:
Где start включает указанный индекс, а end исключается. По умолчанию начальное значение равно 0, конечное длине массива.
Примеры:

Сравнение массивов

Массивы сравниваются оператором ==, который проверяет наличие одинаковой длины и одинаковые элементы в одном порядке.

Сортировка массивов

Массивы можно отсортировать с помощью пакета sort. Функция sort.Ints() сортирует массив целых чисел по возрастанию.
Другой способ — применение вложенных циклов:

Копирование массивов

Массивы можно скопировать с помощью функции copy(), принимающей два аргумента: целевой массив и исходный массив. Возвращаемое значение — количество скопированных элементов.

Удаление элементов массива

Удаление элемента массива достигается путём присвоения нулевого значения типу элемента:
Нулевое значение целого числа — это 0.

Проверка наличия элемента в массиве

Проверить, присутствует ли элемент в массиве, можно с помощью функции sort.Search() из пакета sort.

Разворот массива

Обратить порядок элементов массива можно двумя способами:
  • Замена первого элемента последним, второго предпоследним и так далее.
  • Использование функции sort.Reverse() из пакета sort.
Первый вариант:
Второй вариант:

Многомерные массивы

Многомерные массивы представляют собой массивы массивов. Например, двумерный массив создаётся следующим образом:
Этот код создаёт двумерный массив размером 2 строки и 3 столбца, содержащий целые числа.
Доступ к элементам производится указанием индексов строк и столбцов:

Вот и всё, что вам потребуется знать о массивах в Go. Надеюсь, данное руководство оказалось полезным.