Array

Массивы представляют последовательность элементов одного типа. Массив определяется следующим способом:

**var** numbers [число_элементов]тип_элементов

Например:

**var** numbers [5]**int**

При таком определении все элементы массива инициализируются значениями по умолчанию. Но также можно инициализировать элементы массива другими значениями:

**var** numbers [5]**int** = [5]**int**{1,2,3,4,5}

Значения передаются в фигурных скобках через запятую. При этом значений не может быть больше длины массива. В данном случае длина массива равна 5, поэтому нельзя в фигурных скобках определить больше пяти элементов. Но можно определить меньше элементов:

**var** numbers [5]**int** = [5]**int**{1,2}
fmt.Println(numbers)

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

Также можно применять сокращенное определение переменной массива:

numbers := [5]**int**{1,2,3,4,5}

Если в квадратных скобках вместо длины указано троеточие, то длина массива определяется, исходя из количества переданных ему элементов:

**var** numbers = [...]**int**{1,2,3,4,5}   // длина массива 5
numbers2 := [...]**int**{1,2,3}         // длина массива 3
fmt.Println(numbers)                // [1 2 3 4 5]
fmt.Println(numbers2)               // [1 2 3]

При этом длина массива является частью его типа. И, к примеру, следующие два массива представляют разные типы данных, хотя они и хранят данные одного типа:

**var** numbers [3]**int** = [3]**int**{1, 2, 3}
**var** numbers2 [4]**int** = [4]**int**{1, 2, 3, 4}
numbers = numbers2  // ! Ошибка

И в данном случае при присвоении мы получим ошибку, так как данные одного типа пытаемся передать переменной другого типа.

Индексы

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

**func** main() {    
	**var** numbers [5]**int** = [5]**int**{1,2,3,4,5}    
	fmt.Println(numbers[0])     // 1    
	fmt.Println(numbers[4])     // 5    
	numbers[0] = 87    
	fmt.Println(numbers[0])     // 87
}