Урок 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 целых чисел?