#7 golang Массивы - способы определения
Primary tabs
Forums:
Массив — это набор данных из нескольких значений одного типа.
Особенностью массивов в Go является то, что:
- размер массива — это часть типа данных.
- Это значит, что массив размером 2 и массив размером 3 — это два совершенно разных типа данных, которые между собой несовместимы.
- Причём размер массива задаётся при компиляции, он не может быть изменён динамически.
Массив объявляется, используя квадратные скобки, в которых указан его размер, и потом тип данных, элементы которого хранит этот массив:
// размер массива является частью его типа
// инициализация значениями по умолчанию
var a1 [3]int // [0,0,0]
a1[0] = 1 // устанавливаем конкретное значение
fmt.Println("a1 short", a1)
fmt.Printf("a1 short %v\n", a1)
fmt.Printf("a1 full %#v\n", a1)
-- в данном примере создаем массив из трех элементов, под них сразу же будет выделена память, эти элементы сразу же будут проинициализированы значениями по умолчанию.
Задание размера массива через константы
Для определения размера массива можно использовать константы, но не переменные, вот так будет работать:
const size = 2
var a2 [2 * size]bool // [false,false,false,false]
fmt.Println("a2", a2)
а вот это не скомпилируется:
size := 2 var a2[size] bool
Задание массива "литералом" при объявлении - перечисление всех конкретных значений
Еще можно определить массив при инициализации. Вместо размера можно написать три точки: это значит, что нужно взять столько элементов, сколько находится правее в фигурных скобках. И в фигурных скобках указать через запятую значения элементов этого массива:
// определение размера при объявлении
a3 := [...]int{1, 2, 3}
fmt.Println("a2", a3)
-- в данном случае в массиве будет три элемента.
Выход за пределы массива
Если попробовать обратиться к элементу массиву, выходя за его пределы, то возможны варианты:
- Если индекс, к которому мы обращаемся это константа, то код просто не скомпилируется.
- Если будет такой динамически вычисляемый индекс, то проверится уже в runtime, а программа завершится паникой.
// проверка при компиляции или при выполнении // invalid array index 4 (out of bounds for 3-element array) // a3[idx] = 12
Особенности использования массивов
Мы не всегда знаем, какого размера точно нам нужен массив, и никак не можем это задать во время выполнения программы (runtime), поэтому массив — это довольно низкоуровневый тип данных, который используется нечасто.
Гораздо чаще используется другой тип, который основывается на массиве и называется срез (слайс)
- Log in to post comments
- 48 reads