Ответ
Дженерики в Go — мощный инструмент, но с оговорками. Они появились в Go 1.18 и решают проблему дублирования кода для разных типов, сохраняя статическую типизацию.
Плюсы:
- Уменьшают boilerplate (например, для функций
Min/Maxили коллекций). - Сохраняют типобезопасность — ошибки ловятся на этапе компиляции.
Осторожно:
- Усложняют читаемость, если переусердствовать (например, вложенные дженерики).
- Не заменяют интерфейсы там, где нужна полиморфность поведения.
Пример:
func SliceContains[T comparable](s []T, val T) bool {
for _, v := range s {
if v == val {
return true
}
}
return false
}
// Использование:
SliceContains([]int{1, 2, 3}, 2) // true
SliceContains([]string{"a", "b"}, "c") // false
Итог: дженерики — хорошее дополнение, но не серебряная пуля. Используй там, где они действительно упрощают код, а не ради моды.