← Все этапы
03 · ДАННЫЕ И ТИПЫУрок 13 из 3318 минут

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

Храним значения одного типа в коллекции известной длины и обходим её по индексам.

Длина — часть типа

Массив хранит несколько значений одного типа подряд. Его длина задаётся при объявлении и не меняется во время работы. Поэтому [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 само по себе не изменило бы массив. Для изменения элемента используй индекс массива.

Когда выбирать массив

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

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

Практика

Попробуйте сами

Объяви массив из пяти целых чисел для показаний температуры. Заполни первые три значения числами 18, 21 и 19, а оставшиеся оставь не заданными. Одним циклом выведи каждый индекс и значение, вторым вычисли сумму всех пяти элементов.

Проверка результата

Как понять, что получилось

Вывод содержит пары 0: 18, 1: 21, 2: 19, 3: 0 и 4: 0; сумма всех пяти значений равна 58. Длина массива — 5, обход использует range или индексы до len.

Массивы фиксированного размера | Go | WebSchool · Go