> Зачем используются интерфейсы в Go (Go)

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

Компании: Wildberries, YADRO, VK, Ютека, Orion_soft, Ozon, Black Wall Group (BWG)

Стек: Go

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

Интерфейсы в Go используются для описания поведения, а не структуры данных. Они позволяют реализовать полиморфизм и слабую связанность кода, не требуя явного наследования. Основные причины:

  1. Абстракция и тестирование: Интерфейс определяет контракт - набор методов. Любой тип, реализующий эти методы, автоматически удовлетворяет интерфейсу (duck typing). Это упрощает замену реальных зависимостей на моки при тестировании.
    Пример: интерфейс io.Writer позволяет писать данные в файл, сетевой сокет или буфер, не меняя логику вызывающего кода.

  2. Снижение связанности: Код работает с интерфейсами, а не с конкретными типами. Изменение реализации не требует переписывания зависимостей. Например, функция, принимающая interface{ Write([]byte) (int, error) }, может работать с любым Writer.

  3. Полиморфизм без иерархий: В Go нет классов, но интерфейсы позволяют единообразно работать с разными типами. Например, sort.Interface требует три метода (Len, Less, Swap), и любой срез, их реализующий, может быть отсортирован.

  4. Пустой интерфейс (interface{}): Используется для функций, работающих с любым типом (например, fmt.Println), но требует приведения типов - применяется с осторожностью.

Таким образом, интерфейсы - ключевой механизм для создания гибкого, тестируемого и расширяемого кода в Go.

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

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