Длина — часть типа
Массив хранит несколько значений одного типа подряд. Его длина задаётся при объявлении и не меняется во время работы. Поэтому [3]int и [4]int — разные типы, даже если элементы у обоих целые числа.
Индексы начинаются с нуля: у массива из трёх элементов допустимы индексы 0, 1 и 2. Если не указать часть элементов при создании, они получат нулевые значения. len возвращает длину; вместе с range он позволяет обойти элементы, не вычисляя последний индекс вручную.
Пример
package main
import "fmt"
func main() {
var scores [4]int
scores[0] = 7
scores[1] = 12
scores[2] = 9
total := 0
for index, score := range scores {
fmt.Printf("место %d: %d\n", index+1, score)
total += score
}
fmt.Printf("всего: %d из %d оценок\n", total, len(scores))
}
Четвёртый элемент остаётся равен нулю, потому что его не заполняли. В цикле переменная score содержит копию текущего элемента; присваивание score = 5 само по себе не изменило бы массив. Для изменения элемента используй индекс массива.
Когда выбирать массив
Массив полезен, когда число позиций действительно фиксировано, например для трёх координат. Для списка, который должен расти по мере добавления данных, обычно выбирают срез — следующий тип в маршруте.
Попытка обратиться к индексу вне границ массива приводит к ошибке во время выполнения, если неверный индекс нельзя обнаружить раньше при компиляции.