Масив

Масив #

Масиви являють собою структуровані набори даних із заданою кількістю елементів. Ми можемо представити масив у вигляді довгого ящику поділеного на комірки. Кількість комірок постійна

Array

У кожну комірку ми можемо покласти будь які дані, так само як і просто в окрему змінну. Цифри які на малюнку написані під кожною коміркою називаються індексом масиву. На малюнку ми бачимо 8 комірок

Важливим моментом є те що у масиві всі комірки можуть мати один і той самий тип. Тобто якщо ми створюємо масив з типом комірок int , то всі комірки будуть мати цей тип.

Для позначення типу масив у коді ми використовуємо квадратні дужки.

Ось таким чином ми можемо оголосити змінну, яка буде мати значення типу “масив”:

var myVar [8]int

у цьому прикладі ми оголосили змінну myVar як масив значень цілих чисел, кількість елементів в якому буде дорівнювати 8. Тобто у квадратних дужках перед типом значень елементів масиву ми вказуємо кількість елементів масиву.

Якщо ми при створенні масиву не вказували значення, то вони будуть дорівнювати порожньому значенню. Наприклад, для типу int це буде 0. Тобто створений масив буде мати 8 значень які дорівнюють 0.

Ми пам’ятаємо, що у Go ми можемо створити одразу змінну разом зі значеннями. Масиви не є виключенням.

var myArray [8]int = [8]int{1, 5, 7, 3, 8, 34, 64, 33}

Значення прописуються у фігурних дужках одразу після типу. Між собою розділяються комою.

Або через скорочену форму:

myArray := [8]int{1, 5, 7, 3, 8, 34, 64, 33}

Кожен елемент масиву має свій індекс, завдяки якому ми можемо звернутись саме до цього елементу. Індекси послідовні і починаються з 0. Тобто перший елемент буде мати індекс 0, другий - 1, третій - 2 і так далі.

Ми можемо встановити значення будь якого елементу масиву коли нам треба:

myArray[2] = 28

Таким чином ми встановили в елемент з індексом 2 (третій елемент) значення 28. Тепер наш масив виглядатиме так: [ 1, 5, 28, 3, 8, 34, 64, 33 ]

Так само ми можемо звернутись до будь-якого елементу масиву для того щоби отримати його значення:

b := myArray[5]

Таким чином ми встановимо у змінну b значення елементу з індексом 5 (шостого елементу).

Якщо ми спробуємо звернутись до елементу, який має індекс більше ніж максимальний індекс масиву, то Go перевірить це у момент компіляції і ми отримаємо помилку:

c := myArray[9]

при спробі скомпілювати нашу програму ми отримаємо таку помилку: invalid argument: index 9 out of bounds [0:7]

Ми можемо звернутись до якогось елементу, використовуючи не конкретне значення, а зміну цілого типу:

i := 4
b := myArray[i]

таким чином ми звернемось до елементу, індекс якого буде знаходитись у змінній i. Якщо у змінній i буде значення більше ніж кількість елементів, то програма все одно скомпілюється, але ми на цей раз отримаємо помилку при виконанні такого вигляду: panic: runtime error: index out of range [9] with length 8

Окрім того, для індексів не можна використовувати від’ємні числа, це теж викличе помилку.

Оскільки масиви мають фіксований розмір, пам’ять для структури даних потрібно виділити тільки один раз, тоді як для структур даних змінної довжини потрібне динамічне виділення пам’яті в більшому або меншому обсязі. Хоча через фіксовану довжину масивів вони не відрізняються гнучкістю у використанні, одноразове виділення пам’яті дає змогу підвищити швидкість і продуктивність вашої програми. У зв’язку з цим, розробники зазвичай використовують масиви під час оптимізації програм, у тому числі, коли для структур даних не потрібна змінна кількість елементів.