Составные типы данных на Golang

Типы данных Golang

В Go типы данных разделяют на следующие четыре категории:

  1. Базовый тип. К этой категории относятся числа, строки и логические (булевы) значения.
  2. Агрегированный тип. К этой категории относятся массив и структуры. Их значения образуются в результате конкатенации других значений в памяти.
  3. Ссылочный тип. К этой категории относятся указатели, срезы, ассоциативный массив, функции и каналы.
  4. Интерфейсный тип.

В этой статье мы рассмотрим четыре составных типа: массивы, срезы, ассоциативный массив и структуры.


Массив

  • В массиве хранится набор однотипных (однородных) элементов.
  • Элементы массива хранятся в непрерывных участках памяти.
  • Массив имеет фиксированный размер.
  • Стили объявления:
// Заданный фиксированный размер
a := [3]int{1,2,3}
// Литерал массива с длиной, определяемой механизмом вывода типов
a := [...]int{1,2,3}
var a [3]int
a[0] = 1
a[1] = 2
a[2] = 3

В литерале массива нотация ... используется для указания длины, равной количеству элементов в литерале.

  • Копии массивов ссылаются на различные опорные данные.

При использовании массива в качестве параметров функции функция внутри принимает вместо исходного массива его копию. Это поведение отличается от поведения, характерного для других языков, в которых массивы передаются по ссылке неявно.

Копия массива Go

Срез

Пример среза
  • В срезе не хранится никаких данных, им лишь описывается раздел опорного массива, которым срез поддерживается.
  • Встроенная функция 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  —  это набор различных (разнородных) типов данных, описывающих единую концепцию.

  • Поля или свойства структур хранятся в смежных участках памяти.
  • Структура имеет фиксированный размер (точно так же, как и массив).
  • Копии структур ссылаются на различные опорные данные.

Вот и все, что нужно знать о четырех составных типах: массивах, срезе, ассоциативном массиве и структурах.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Jerry An: Composite Data Types in Golang

Предыдущая статьяЖажда скорости: Python с расширениями С
Следующая статья17 успешных примеров дизайна логотипов для различных бизнес-целей