Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Массивы и слайсы
В этой главе мы познакомимся с двумя структурами данных: массивами и слайсами. Массив — это нумерованный набор переменных одного типа, который имеет фиксированный размер. Переменная в массиве называется элементом, а ее позиция в массиве задается индексом. Слайс является оберткой над массивом. Можно сказать, что слайс — это динамический массив, т. е. массив, который может изменять размер во время выполнения программы.
Массивы
Массив — это нумерованный набор переменных одного типа, который имеет фиксированный размер. Переменная в массиве называется элементом, а ее позиция в массиве задается индексом. Обратите внимание на то, что нумерация элементов массива начинается с 0
, а не с 1
, поэтому первый элемент имеет индекс 0
.
Объявление и инициализация массива
Объявление массива выглядит следующим образом:
var <Переменная> [<Число элементов>]<Тип> =
[<Число элементов>]<Тип>{<Значения через запятую>}
Пример объявления массива из трех элементов, имеющих тип int
:
var arr [3]int
fmt.Printf("%T\n", arr) // [3]int
fmt.Println(arr) // [0 0 0]
fmt.Printf("%v\n", arr) // [0 0 0]
fmt.Printf("%#v\n", arr) // [3]int{0, 0, 0}
В результате такого объявления создается массив из трех элементов, имеющих значения по умолчанию для типа. Напомню, что для числовых типов значением по умолчанию является 0
, для строк — пустая строка, для указателей — значение nil
.
При объявлении элементам массива можно присвоить начальные значения. Для этого после объявления указывается оператор =
, далее внутри квадратных скобок задается число элементов массива и после закрывающей квадратной скобки передается тип элементов массива, а затем перечисляются значения через запятую внутри фигурных скобок. Пример инициализации массива:
var arr [3]int = [3]int{10, 20, 30}
fmt.Println(arr) // [10 20 30]
Если выполняется инициализация, то тип данных можно не указывать:
var arr = [3]int{10, 20, 30}
fmt.Printf("%T\n", arr) // [3]int
fmt.Println(arr) // [10 20 30]
Можно также использовать сокращенный формат объявления локальной переменной:
arr := [3]int{10, 20, 30}
fmt.Printf("%T\n", arr) // [3]int
fmt.Println(arr) // [10 20 30]
Количество значений внутри фигурных скобок может быть меньше количества элементов массива. В этом случае значения присваиваются соответствующим элементам с начала массива. Пример:
arr := [3]int{10, 20}
fmt.Println(arr) // [10 20 0]
В этом примере первому элементу массива присваивается значение 10
, второму — значение 20
, а третьему элементу будет присвоено значение по умолчанию 0
.
Если число значений внутри фигурных скобок больше размера массива, то будет ошибка при компиляции:
arr := [3]int{10, 20, 30, 40} // Ошибка!
// array index 3 out of bounds [0:3]
Присвоить всем элементам массива значение по умолчанию можно так:
arr := [3]int{}
fmt.Println(arr) // [0 0 0]
Если при объявлении массива указываются начальные значения, то внутри квадратных скобок можно указать троеточие. Размер массива будет соответствовать количеству значений внутри фигурных скобок. Пример:
arr := [...]int{10, 20, 30}
fmt.Printf("%T\n", arr) // [3]int
fmt.Println(arr) // [10 20 30]
Допускается указывать значения на отдельных строках. В этом случае после последнего значения должна стоять завершающая запятая или закрывающая фигурная скобка:
arr := [3]int{
10,
20,
30, // Завершающая запятая обязательна!
}
fmt.Println(arr) // [10 20 30]
arr2 := [3]int{
40,
50,
60}
fmt.Println(arr2) // [40 50 60]
Внутри фигурных скобок перед значениями можно указать индекс и двоеточие. В этом случае элементы могут быть перечислены в произвольном порядке:
arr := [3]int{2: 30, 1: 20, 0: 10}
fmt.Println(arr) // [10 20 30]
Пример присваивания массива после объявления:
var arr [3]int
arr = [3]int{10, 20, 30}
fmt.Println(arr) // [10 20 30]
Байтовый и символьный массив можно инициализировать двумя способами:
- указав коды байтов или символов внутри фигурных скобок:
var arr1 = [...]byte{116, 101, 115, 116}
var arr2 = [...]rune{116, 101, 115, 116}
fmt.Println(arr1) // [116 101 115 116]
fmt.Println(arr2) // [116 101 115 116]
- указав символьные литералы внутри фигурных скобок:
var arr1 = [...]byte{'t', 'e', 's', 't'}
var arr2 = [...]rune{'t', 'e', 's', 't'}
fmt.Println(arr1) // [116 101 115 116]
fmt.Println(arr2) // [116 101 115 116]
[2]int
и [3]int
являются разными типами данных.Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов