Бесплатный курс по go. Зарегистрируйтесь для отслеживания прогресса →

Go: Массивы

Массив — это коллекция однотипных значений фиксированной длины:

nums := [5]int{}

Длина массива указывается в квадратных скобках. Если не заполнить массив при инициализации, то массив будеть состоять из нулевых значений данного типа:

nums := [5]int{} // [0, 0, 0, 0, 0]

// длинная инициализация
var nums [5]int // [0, 0, 0, 0, 0]

При попытке инициализации элементов за границей массива выходит ошибка компиляции:

nums := [1]int{1,2} // array index 1 out of bounds [0:1]

Чтение и запись элементов массива происходит через квадратные скобки:

nums := [3]int{1,2,3}

nums[1] // 2

nums[2] = 33 // [1, 2, 33]

При попытке чтения/записи элементов за границей массива выходит ошибка компиляции:

words := [2]string{}

words[2] // invalid array index 2 (out of bounds for 2-element array)

Массивы в Go передаются по значению, следовательно, любое изменение внутри функции не влияет на исходный массив:

package main

import (
    "fmt"
)

func main() {
    a := [3]int{1,2,3}

    modifyArr(a)

    fmt.Println(a) // 1, 2, 3
}

func modifyArr(nums [3]int) {
    nums[0] = 35
}

Задание

Реализуйте функцию SafeWrite(nums [5]int, i, val int) [5]int, которая записывает значение val в массив arr по индексу i, если индекс находится в рамках массива. В противном случае массив возвращается без изменения.


Советы


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе