В Go типы данных разделяют на следующие четыре категории:
- Базовый тип. К этой категории относятся числа, строки и логические (булевы) значения.
- Агрегированный тип. К этой категории относятся массив и структуры. Их значения образуются в результате конкатенации других значений в памяти.
- Ссылочный тип. К этой категории относятся указатели, срезы, ассоциативный массив, функции и каналы.
- Интерфейсный тип.
В этой статье мы рассмотрим четыре составных типа: массивы, срезы, ассоциативный массив и структуры.
Массив
- В массиве хранится набор однотипных (однородных) элементов.
- Элементы массива хранятся в непрерывных участках памяти.
- Массив имеет фиксированный размер.
- Стили объявления:
// Заданный фиксированный размер
a := [3]int{1,2,3}
// Литерал массива с длиной, определяемой механизмом вывода типов
a := [...]int{1,2,3}
var a [3]int
a[0] = 1
a[1] = 2
a[2] = 3
В литерале массива нотация ...
используется для указания длины, равной количеству элементов в литерале.
- Копии массивов ссылаются на различные опорные данные.
При использовании массива в качестве параметров функции функция внутри принимает вместо исходного массива его копию. Это поведение отличается от поведения, характерного для других языков, в которых массивы передаются по ссылке неявно.
Срез
- В срезе не хранится никаких данных, им лишь описывается раздел опорного массива, которым срез поддерживается.
- Встроенная функция
len
возвращает количество элементов в срезе. - Встроенная функция
cap
возвращает длину опорного массива. - Стили объявления:
// срез имеющегося массива
a := [...]int{1,2,3,4,5,6}
b := a[:3]
// стиль литерала
c := []int{1,2,3,4,5,6}
// с помощью функции «make»
d := make([]int, 10, 100) // срез длиной и объемом length==10 capacity==100 соответственно
e := make([]int, 10) // срез длиной и объемом length==10 capacity==10 соответственно
- Копии срезов ссылаются на одни и те же опорные данные, что отличает их от массивов.
Ассоциативный массив
В Go ассоциативный массив представляет собой ссылку на хеш-таблицу. Это набор элементов, которые объединены в пары вида «ключ — значение».
- Стили объявления:
// стиль литерала
p := map[string]int{
"Key1": 1,
"Key2": 2,
}
// с помощью функции «make»
q := make(map[string]int)
q["key3"] = 4
- Чтобы узнать, присутствовал элемент или нет, используем такую проверку:
value, ok := p["Key2"]
- Множественные присваивания ссылаются на одни и те же опорные данные.
Структура
Структуры на Golang одни из наиболее часто используемых. Это способ создания типов, определяемых пользователем.
Структура struct
— это набор различных (разнородных) типов данных, описывающих единую концепцию.
- Поля или свойства структур хранятся в смежных участках памяти.
- Структура имеет фиксированный размер (точно так же, как и массив).
- Копии структур ссылаются на различные опорные данные.
Вот и все, что нужно знать о четырех составных типах: массивах, срезе, ассоциативном массиве и структурах.
Читайте также:
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Jerry An: Composite Data Types in Golang