Массивы: коллекции фиксированной длины
Литералы массивов, индексация и длина
«Массивы: коллекции фиксированной длины» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое массив
Массив в Go — это последовательность элементов одного типа с фиксированной длиной. Длина является частью типа: [3]int и [4]int — разные типы.
- Массивы являются типами-значениями — присваивание копирует весь массив
- Длина всегда известна во время компиляции
- Массивы редко используют напрямую; для большинства задач предпочитают срезы
Литералы массивов
Объявляйте и инициализируйте массивы с помощью литерала:
package main
func main() {
primes := [5]int{2, 3, 5, 7, 11}
names := [3]string{"Alice", "Bob", "Carol"}
flags := [4]bool{true, false, true, false}
_ = primes; _ = names; _ = flags
}Длина массива и индексация
Используйте len(), чтобы получить длину, и индексацию с отсчётом от нуля для чтения и записи элементов:
package main
import "fmt"
func main() {
scores := [3]int{90, 85, 92}
fmt.Println(len(scores)) // 3
fmt.Println(scores[0]) // 90
scores[1] = 100
fmt.Println(scores) // [90 100 92]
}Многоточие в литералах массивов
Используйте [...], чтобы компилятор сам подсчитал количество элементов:
package main
import "fmt"
func main() {
days := [...]string{"Mon","Tue","Wed","Thu","Fri"}
fmt.Println(len(days)) // 5
}Массивы являются типами-значениями
При присваивании массива или передаче его в функцию Go копирует его целиком. Изменение копии не влияет на оригинал:
package main
import "fmt"
func main() {
a := [3]int{1, 2, 3}
b := a // full copy
b[0] = 99
fmt.Println(a) // [1 2 3] — unchanged
fmt.Println(b) // [99 2 3]
}Сравнение массивов
Массивы одного типа и длины можно сравнивать с помощью == и !=:
package main
import "fmt"
func main() {
x := [3]int{1, 2, 3}
y := [3]int{1, 2, 3}
z := [3]int{1, 2, 4}
fmt.Println(x == y) // true
fmt.Println(x == z) // false
}Двумерные массивы
Массивы можно вкладывать друг в друга, образуя сетки или матрицы:
package main
import "fmt"
func main() {
grid := [2][3]int{
{1, 2, 3},
{4, 5, 6},
}
fmt.Println(grid[1][2]) // 6
}Перебор массива
Для перебора используйте классический цикл for или range:
package main
import "fmt"
func main() {
nums := [4]int{10, 20, 30, 40}
for i, v := range nums {
fmt.Printf("[%d] = %d\n", i, v)
}
}Массивы и срезы
Основные различия:
- Массив: фиксированный размер, тип-значение, размер является частью типа
- Срез: динамический размер, ссылочный тип, основан на массиве
- На практике используйте срезы, если только Вам не нужен фиксированный размер, известный во время компиляции (например, хеш SHA-256
[32]byte)
Распространённые ошибки
Обратите внимание на следующие моменты:
- Индекс за пределами диапазона — Go вызывает панику во время выполнения, если
i >= len(arr) - Передача больших массивов в функции приводит к затратному копированию — вместо этого используйте указатели или срезы
- Не забывайте, что
[3]intи[4]int— несовместимые типы
Быстрая проверка
Какова длина [...]string{"a","b","c"}?
Итоги: массивы
Основные выводы:
- Массивы имеют фиксированную длину, известную во время компиляции, и эта длина является частью типа
- Они являются типами-значениями — присваивание копирует все элементы
- Используйте
len()и индексацию с отсчётом от нуля - Для большинства задач работы с коллекциями предпочитайте срезы
Задание для практики
Объявите массив из 5 целых чисел, присвойте третьему элементу значение 100, затем выведите массив с помощью range.
Часто задаваемые вопросы
Урок «Массивы: коллекции фиксированной длины» бесплатный?
Да — полный текст урока «Массивы: коллекции фиксированной длины» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Массивы: коллекции фиксированной длины»?
Литералы массивов, индексация и длина Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Массивы: коллекции фиксированной длины»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Массивы: коллекции фиксированной длины
- Срезы: динамические списки
- Отображения: хранилища пар ключ-значение
- Итерация по коллекциям с range