> Что такое дженерики в Go и зачем они нужны (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: TrendTech
Стек: Go
> Пример ответа
Дженерики (обобщения) в Go - это возможность писать функции и типы, которые работают с произвольными типами данных без потери строгой типизации. Они были введены в Go 1.18.
Основная цель дженериков - устранить дублирование кода. До их появления, если нужно было написать функцию для работы с разными типами (например, сложение чисел или поиск в срезе), приходилось либо использовать интерфейсы с пустым interface{} и делать приведение типов (type assertion), что теряло безопасность типов, либо писать отдельные функции для каждого типа (например, SumInts, SumFloats). Дженерики решают это, позволяя объявить один обобщённый алгоритм.
Пример: функция, которая находит минимальный элемент в срезе любого сравниваемого типа:
GOfunc Min[T constraints.Ordered](s []T) T {if len(s) == 0 {var zero Treturn zero}min := s[0]for _, v := range s[1:] {if v < min {min = v}}return min}
Здесь [T constraints.Ordered] - это параметр типа, который ограничен интерфейсом constraints.Ordered (включает числа и строки). Компилятор Go генерирует специализированный код для каждого конкретного типа, с которым вызывается функция, обеспечивая производительность, сравнимую с ручным написанием версий для каждого типа.
Таким образом, дженерики нужны для:
- Уменьшения дублирования кода.
- Сохранения строгой типизации на этапе компиляции.
- Повышения читаемости и поддерживаемости кода, когда логика не зависит от конкретного типа.
> Похожие задачи по backend
Расскажите про опыт оптимизации
Что такое MITM (man-in-the-middle) атака и как с ней бороться
Может ли приложение работать в нескольких процессах?
Как реализована аутентификация с поддержкой OpenID и OAuth 2.0
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью