Назад к вопросам
Middle+
4
Где на практике полезны интерфейсы? Приведи реальный пример.
Компании, где спрашивали
X5
Ответ от нейросети
sobes.tech AI
Интерфейсы в Go полезны для определения контрактов, которые должны реализовывать типы, что позволяет писать гибкий и расширяемый код. Они особенно полезны для абстрагирования деталей реализации и упрощения тестирования.
Реальный пример: допустим, у вас есть сервис, который отправляет уведомления разными способами — по email, SMS и push-уведомлениям. Можно определить интерфейс Notifier с методом Notify(message string) error и реализовать его для каждого типа уведомления. Это позволит в коде работать с интерфейсом, не завися от конкретной реализации.
// Интерфейс
type Notifier interface {
Notify(message string) error
}
// Реализация для Email
type EmailNotifier struct {}
func (e EmailNotifier) Notify(message string) error {
// логика отправки email
return nil
}
// Реализация для SMS
type SMSNotifier struct {}
func (s SMSNotifier) Notify(message string) error {
// логика отправки SMS
return nil
}
func SendNotification(n Notifier, msg string) {
err := n.Notify(msg)
if err != nil {
// обработка ошибки
}
}
// Использование
email := EmailNotifier{}
sms := SMSNotifier{}
SendNotification(email, "Hello via Email")
SendNotification(sms, "Hello via SMS")
Такой подход упрощает добавление новых способов уведомлений без изменения существующего кода.