Что будет работать быстрее — дженерики или пустые интерфейсы?

В Go производительность дженериков и пустых интерфейсов (interface{}) зависит от конкретного сценария использования.

Короткий ответ

Что ответить на собеседовании

В Go производительность дженериков и пустых интерфейсов (interface{}) зависит от конкретного сценария использования.

Подробный разбор

Ответ с пояснениями

В Go производительность дженериков и пустых интерфейсов (interface{}) зависит от конкретного сценария использования.

  • Дженерики позволяют компилировать типобезопасный код, где типы известны на этапе компиляции, что может привести к более эффективному машинному коду и меньшему количеству преобразований типов во время выполнения.
  • Пустой интерфейс (interface{}) — это динамический тип, который требует дополнительной информации о типе и может приводить к операциям приведения типов во время выполнения, что потенциально медленнее.

Таким образом, в большинстве случаев дженерики работают быстрее, чем использование пустых интерфейсов, особенно при большом количестве операций с типами, так как избегают накладных расходов на динамическую типизацию.

Пример:

func SumIntsOrFloats[T int | float64](slice []T) T {
    var sum T
    for _, v := range slice {
        sum += v
    }
    return sum
}

Здесь компилятор генерирует код для конкретных типов, что эффективнее, чем работа с interface{} и приведениями типов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее