Дмитрий Нечаев
Массив в Golang
Массивы в языке программирования Go (или Golang) — это базовый тип данных, который представляет собой фиксированный список элементов одного типа. В этой статье мы рассмотрим, как создавать и использовать массивы в Go, а также их особенности и примеры применения.
Что такое Массив
Массив — это коллекция элементов одного типа фиксированной длины. В отличие от срезов (slice
), длина массива не может изменяться после его создания. Массивы используются, когда известно количество элементов, которые нужно хранить, и это количество остается неизменным.
Создание Массивов
В 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.