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
}