Ответ
В Go структуры данных можно разделить на несколько категорий:
Встроенные (Built-in)
Это фундаментальные типы, встроенные непосредственно в язык.
-
Массивы (Arrays) — коллекция элементов одного типа с фиксированной длиной. Размер массива является частью его типа.
var a [5]int // Массив из 5 целых чисел
-
Срезы (Slices) — более гибкая и часто используемая обертка над массивом. Срез не хранит данные, а описывает непрерывный сегмент базового массива. Состоит из трех компонентов: указатель на массив, длина (length) и емкость (capacity).
s := []int{1, 2, 3} // Срез, созданный с помощью литерала
-
Карты (Maps) — реализация хеш-таблицы для хранения пар ключ-значение. Обеспечивают быстрый поиск, добавление и удаление элементов.
m := make(map[string]int) m["age"] = 30
-
Структуры (Structs) — композитный тип данных, который позволяет группировать поля разных типов в единое целое.
type Point struct { X, Y int }
-
Каналы (Channels) — типизированный канал для безопасной коммуникации и синхронизации между горутинами.
ch := make(chan string)
Стандартная библиотека
Пакеты из стандартной библиотеки предоставляют реализации классических структур данных.
container/list
— реализация двусвязного списка.container/heap
— реализация кучи (пирамиды), полезная для создания приоритетных очередей.sync.Map
— потокобезопасная карта, оптимизированная для сценариев, где запись происходит редко, а чтение — часто.
Пользовательские реализации
Более сложные структуры, такие как деревья, графы или очереди, обычно реализуются вручную с использованием структур и указателей.
// Пример узла бинарного дерева
type Node struct {
Value int
Left *Node
Right *Node
}