В Go представлены следующие основные способы написания обобщенного кода:
Интерфейсы: Позволяют писать функции, которые работают с любыми типами, удовлетворяющими определенному набору методов.
go
Пустой интерфейс (interface{}): Универсальный тип, которым может быть представлено любое значение. Требует приведения типов перед использованием.
go
Дженерики (Generics) / Параметризованные типы (type parameters): Позволяют писать функции и типы, которые работают с произвольными наборами типов, указанными при объявлении. Добавлены в Go 1.18.
go
Рефлексия (reflect): Позволяет исследовать и взаимодействовать с типами и значениями во время выполнения. Часто используется для сложных сценариев, но может быть менее производительной и безопасной, чем другие подходы.
go
Выбор способа зависит от конкретной задачи и требуемого уровня гибкости и производительности. Дженерики являются предпочтительным способом для создания обобщенных алгоритмов и структур данных в современном Go. Интерфейсы остаются ключевым механизмом для полиморфизма и определения поведения. Пустой интерфейс и рефлексия используются реже, для более специфичных случаев.