Дмитрий Нечаев
Массив в Golang
Массивы в языке программирования Go (или Golang) — это базовый тип данных, который представляет собой фиксированный список элементов одного типа. В этой статье мы рассмотрим, как создавать и использовать массивы в Go, а также их особенности и примеры применения.
Что такое Массив
Массив — это коллекция элементов одного типа фиксированной длины. В отличие от срезов (slice), длина массива не может изменяться после его создания. Массивы используются, когда известно количество элементов, которые нужно хранить, и это количество остается неизменным.
Массивы - это базовая структура данных, но для эффективного их использования необходимо понимать, как они работают в Go, какие операции с ними наиболее эффективны и как избежать распространенных ошибок. Если вы хотите детальнее погрузиться в основы работы с массивами и другими структурами данных в Go, приходите на наш большой курс Основы Golang. На курсе 193 уроков и 16 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Создание Массивов
В Go массив можно создать несколькими способами:
Объявление массива с заданной длиной
Самый простой способ создать массив — это задать его длину и инициализировать элементы:
package main import "fmt" func main() { var nums [5]int // Создаем массив из 5 элементов, инициализированных нулями fmt.Println(nums) // Вывод: [0 0 0 0 0] }Здесь создается массив
numsдлиной 5, и все его элементы инициализируются значением по умолчанию (нулем).Инициализация массива значениями
Можно сразу инициализировать массив значениями при его объявлении:
package main import "fmt" func main() { nums := [5]int{1, 2, 3, 4, 5} fmt.Println(nums) // Вывод: [1 2 3 4 5] }В этом примере создается массив
numsдлиной 5, который инициализируется заданными значениями.Неявное определение длины
Длину массива можно не указывать явно, и она будет рассчитана на основе количества инициализаторов:
package main import "fmt" func main() { nums := [...]int{10, 20, 30} fmt.Println(nums) // Вывод: [10 20 30] }В этом случае длина массива
numsбудет определена автоматически как 3.
Доступ к элементам массива
Для доступа к элементам массива используется синтаксис с квадратными скобками [], где внутри скобок указывается индекс элемента. Индексы начинаются с нуля:
package main
import "fmt"
func main() {
nums := [3]int{10, 20, 30}
fmt.Println(nums[0]) // Вывод: 10
fmt.Println(nums[2]) // Вывод: 30
}
Можно также изменять значение элемента массива:
package main
import "fmt"
func main() {
nums := [3]int{10, 20, 30}
nums[1] = 50
fmt.Println(nums) // Вывод: [10 50 30]
}
Итерация по массиву
Для перебора всех элементов массива можно использовать цикл for с range:
package main
import "fmt"
func main() {
nums := [4]int{5, 10, 15, 20}
for index, value := range nums {
fmt.Printf("Индекс: %d, Значение: %d\n", index, value)
}
}
Здесь range позволяет получить и индекс, и значение каждого элемента массива.
Длина и емкость массива
Для получения длины массива используется функция len():
package main
import "fmt"
func main() {
nums := [5]int{1, 2, 3, 4, 5}
fmt.Println("Длина массива:", len(nums)) // Вывод: 5
}
Массивы в Go имеют фиксированную длину, поэтому емкость массива всегда равна его длине. Таким образом, функция cap() также возвращает длину массива:
package main
import "fmt"
func main() {
nums := [5]int{1, 2, 3, 4, 5}
fmt.Println("Емкость массива:", cap(nums)) // Вывод: 5
}
Массивы как аргументы функций
Важно помнить, что массивы в Go передаются в функции по значению, что означает, что передается копия массива, а не ссылка на оригинальный массив:
package main
import "fmt"
func modifyArray(arr [3]int) {
arr[0] = 100
}
func main() {
nums := [3]int{1, 2, 3}
modifyArray(nums)
fmt.Println(nums) // Вывод: [1 2 3]
}
В этом примере изменение массива внутри функции modifyArray не повлияет на оригинальный массив nums.
Заключение
Массивы в Go — это полезный инструмент для хранения фиксированного количества элементов одного типа. Они обеспечивают высокую производительность, но из-за фиксированной длины их использование может быть ограничено в динамических сценариях. Для более гибкого управления коллекциями данных обычно применяются срезы (slice), которые мы рассмотрели в другой статье. В следующей статье мы изучим, как использовать многомерные массивы в Go.
Понимание массивов - это первый шаг к освоению Go. Для создания более сложных и эффективных программ вам потребуется знание слайсов, указателей и других важных концепций. Чтобы получить все необходимые знания и навыки, рассмотрите возможность прохождения курса Основы Golang. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Go прямо сегодня и станьте уверенным разработчиком.
Постройте личный план изучения Golang до уровня Middle — бесплатно!
Golang — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Golang
Лучшие курсы по теме

Основы Golang
Антон Ларичев
Nest.js с нуля
Антон Ларичев