Перейти к содержимому
10 / 15

Дженерики в Go: параметры типа, ограничения и где они не работают

Дженерики появились в Go 1.18 и устроены нарочито скромно. Функция или тип получают параметры типа в квадратных скобках, а каждый параметр обязан иметь ограничение — интерфейс, описывающий допустимые типы. Ограничение может перечислять методы (как обычный интерфейс) или сами типы через объединение: ~int | ~float64, где тильда означает «и любой тип с таким базовым». В стандартной библиотеке есть any, comparable и пакет constraints в дополнительных модулях, а также готовые обобщённые пакеты slices и maps. Главное ограничение, о котором спрашивают: до Go 1.27 методы не могли иметь собственных параметров типа — параметризовать разрешалось только тип целиком; в 1.27 дженерик-методы появились. Прочие границы остались: нет специализации по типу, нет вывода типа из возвращаемого значения, а поля структуры по параметру типа не адресуются иначе как через ограничения на методы.

Дженерики в Go: параметры типа, ограничения и где они не работают | JScriptiser