> Что такое дженерики в Go и зачем они нужны (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: TrendTech

Стек: Go

> Пример ответа

Дженерики (обобщения) в Go - это возможность писать функции и типы, которые работают с произвольными типами данных без потери строгой типизации. Они были введены в Go 1.18.

Основная цель дженериков - устранить дублирование кода. До их появления, если нужно было написать функцию для работы с разными типами (например, сложение чисел или поиск в срезе), приходилось либо использовать интерфейсы с пустым interface{} и делать приведение типов (type assertion), что теряло безопасность типов, либо писать отдельные функции для каждого типа (например, SumInts, SumFloats). Дженерики решают это, позволяя объявить один обобщённый алгоритм.

Пример: функция, которая находит минимальный элемент в срезе любого сравниваемого типа:

GO
func Min[T constraints.Ordered](s []T) T {
if len(s) == 0 {
var zero T
return zero
}
min := s[0]
for _, v := range s[1:] {
if v < min {
min = v
}
}
return min
}

Здесь [T constraints.Ordered] - это параметр типа, который ограничен интерфейсом constraints.Ordered (включает числа и строки). Компилятор Go генерирует специализированный код для каждого конкретного типа, с которым вызывается функция, обеспечивая производительность, сравнимую с ручным написанием версий для каждого типа.

Таким образом, дженерики нужны для:

  • Уменьшения дублирования кода.
  • Сохранения строгой типизации на этапе компиляции.
  • Повышения читаемости и поддерживаемости кода, когда логика не зависит от конкретного типа.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью