Дженерики в Go: зачем ждали и как использовать
Долгие годы Go жил без дженериков, и сообщество спорило, нужны ли они вообще. В версии 1.18 их добавили — аккуратно и без превращения языка в шаблонный ад.
func Map[T, U any](s []T, f func(T) U) []U {
r := make([]U, len(s))
for i, v := range s {
r[i] = f(v)
}
return r
}Не увлекайтесь
Дженерики хороши для контейнеров и утилит вроде Map, Filter, Keys. Но если задачу решает обычный интерфейс — используйте интерфейс. Идиома Go по-прежнему ценит простоту выше универсальности.
Хорошее правило: пишите конкретный код, а обобщайте, только когда дублирование становится реальной болью.