Модуль
1map2Массивы← вы здесь3Слайсы4Структуры
Урок 1~12 минут

Массивы

Объявление массива

Массив в Go имеет фиксированный размер, заданный при объявлении:

go
var a [5]int         // [0 0 0 0 0]
var b [3]string      // ["" "" ""]

Размер — часть типа. [3]int и [5]int — разные типы.


Литералы

go
primes := [5]int{2, 3, 5, 7, 11}
 
// Автоматический размер — компилятор считает сам
days := [...]string{"Пн", "Вт", "Ср", "Чт", "Пт"}
 
// Инициализация по индексам
sparse := [10]int{0: 1, 5: 25, 9: 81}
// [1 0 0 0 0 25 0 0 0 81]

Индексация и range

go
primes := [5]int{2, 3, 5, 7, 11}
 
fmt.Println(primes[0]) // 2
fmt.Println(primes[4]) // 11
fmt.Println(len(primes)) // 5
 
for i, v := range primes {
    fmt.Printf("primes[%d] = %d\n", i, v)
}

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

go
var matrix [3][3]int
matrix[0][0] = 1
matrix[1][1] = 5
matrix[2][2] = 9
 
// Или сразу:
board := [3][3]string{
    {"X", "O", "X"},
    {"O", "X", "O"},
    {"X", "O", "X"},
}

Массивы передаются по значению

go
func double(arr [3]int) [3]int {
    for i := range arr {
        arr[i] *= 2
    }
    return arr
}
 
a := [3]int{1, 2, 3}
b := double(a)
fmt.Println(a) // [1 2 3] — не изменился
fmt.Println(b) // [2 4 6]

Если массив большой — передавай указатель *[N]T или слайс, чтобы избежать копирования.


Когда использовать массив

Массивы в Go используют редко — обычно предпочитают слайсы. Но массивы полезны когда:

  • Размер известен и фиксирован (SHA-256 хеш — [32]byte)
  • Нужна семантика значения (полное копирование при присваивании)
  • Работа с низкоуровневыми структурами данных
go
var hash [32]byte // SHA-256 результат
var iv [16]byte   // AES initialization vector

В следующем уроке разберём слайсы — гибкую обёртку над массивом, которую используют в 99% кода.

Размер массива — часть его типа. [3]int и [4]int — разные типы, не совместимые друг с другом.
Тип элементов
Визуализация массива a [5]int
[0]
0
[1]
0
[2]
0
[3]
0
[4]
0
Память: 5 × 8 байт = 40 байт
Нулевые значения (zero value)
var a [5]int // все элементы = 0
Литерал массива
a := [5]int{0, 0, 0, 0, 0} // len(a) = 5, cap(a) = 5
Важно: Размер массива — часть типа. [5]int и [6]int — разные типы.
🎯
Миссия 1 из 4
Как объявить массив из 5 целых чисел?