Основы Go
2026-02-26 17:29 Diff

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

Библиотека lo — это популярный набор утилит для работы со срезами и другими структурами данных в Go. Она дополняет возможности стандартной библиотеки, предоставляя функции высокого уровня, которых нет в slices. Мы используем её для упрощения написания кода и повышения читаемости, особенно для таких операций, как объединение или пересечение срезов.

Проверка вхождения элемента

Для проверки наличия элемента в срезе используем slices.Contains():

Удаление дубликатов

Удалить дубликаты можно с помощью slices.Compact(), но только для отсортированных данных. Если порядок элементов важен, используем lo.Uniq():

Объединение (union)

Стандартный пакет slices не предоставляет функции объединения, поэтому используем lo.Union():

Пересечение (intersection)

Для пересечения тоже используем lo.Intersect:

Разность (difference)

Разность множеств можно вычислить через lo.Difference():

Симметрическая разность

Симметрическая разность — это элементы, которые есть в одном из срезов, но не в обоих. Её можно получить через lo.Difference(), комбинируя оба результата:

Вывод

Используя пакет slices для базовых операций и lo для более продвинутых функций (объединение, пересечение, разность), можно работать со срезами в Go так же удобно, как с множествами в других языках.