Menu
Coddy logo textTech

Идиома множества в Go

Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 31 из 68.

В Go нет встроенной структуры данных «множество» (set), как во многих других языках программирования. Однако разработчики на Go нашли элегантное решение, используя map для имитации множеств, и этот паттерн стал настолько распространенным, что считается идиоматичным для Go.

Идиома множества (set) в Go использует карту (map), где важны только ключи, а не значения. Поскольку в качестве значения нужно что-то хранить, программисты на Go используют пустую структуру struct{}. Вот базовый шаблон:

var mySet map[string]struct{}

Пустая структура struct{} особенная, потому что она занимает ноль байт памяти. Это делает её идеальной для множеств, где вам нужно только отслеживать, существует ли что-то или нет, не тратя память на бессмысленные значения.

Этот подход использует фундаментальное свойство ключей карты: они должны быть уникальными. Когда вы добавляете элемент в свое множество, вы на самом деле добавляете ключ в карту. Уникальность автоматически обеспечивается поведением карты, что дает вам истинную семантику множества.

В следующих уроках вы узнаете, как создавать, изменять и работать с множествами, используя этот идиоматичный паттерн Go. Эта техника широко используется в кодовых базах Go для отслеживания уникальных элементов, реализации алгоритмов и решения задач, где требуется быстрая проверка на принадлежность.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Шпаргалка

В Go нет встроенной структуры данных "множество" (set), но для имитации множеств используются карты (maps) с помощью идиоматического паттерна:

var mySet map[string]struct{}

Пустая структура struct{} используется в качестве типа значения, так как она занимает ноль байт памяти. Ключи карты должны быть уникальными, что автоматически обеспечивает семантику множества для отслеживания уникальных элементов.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком