Sobes.tech
Senior

¿Debería devolver una interfaz en lugar de una estructura? ¿Cuándo puede ser una ventaja?

sobes.tech AI

Respuesta de la IA

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

Плюсы:

  • Позволяет менять внутреннюю реализацию без изменения интерфейса.
  • Упрощает тестирование через мок-объекты.
  • Способствует слабой связности и лучшей абстракции.

Пример:

// Интерфейс
 type Reader interface {
     Read(p []byte) (n int, err error)
 }

// Функция возвращает интерфейс, скрывая конкретную структуру
 func NewReader(data string) Reader {
     return &stringReader{data: data}
 }

// Клиент работает с Reader, не зная о stringReader

Однако, если нужна высокая производительность и нет необходимости в абстракции, можно возвращать конкретную структуру.