Sobes.tech
Назад к вопросам
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")

Такой подход упрощает добавление новых способов уведомлений без изменения существующего кода.