Выбор ответа Middle Структуры, методы и интерфейсы обновлено

Где объявлять интерфейс в Go

Вопрос

Где по идиомам Go обычно объявляют интерфейс для репозитория пользователей?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В пакете-потребителе (сервисе), только с нужными методами. Интерфейсы в Go реализуются неявно, поэтому их удобно объявлять у потребителя: сервису нужно два метода, он и объявляет интерфейс из двух методов.

Варианты ответа

  1. В пакете-потребителе (сервисе), только с нужными методамиправильный ответ
  2. В пакете с реализацией, рядом со структурой, со всеми её методами
  3. В отдельном пакете interfaces, общем для всего проекта
  4. Интерфейс не нужен, мокать в Go принято через monkey patching

Разбор

Интерфейсы в Go реализуются неявно, поэтому их удобно объявлять у потребителя: сервису нужно два метода, он и объявляет интерфейс из двух методов. Реализация остаётся структурой, а мок в тестах пишется за минуту. Большой интерфейс рядом с реализацией и общий пакет interfaces характерны для Java-подхода и создают лишние связи. Мокать через интерфейсы как раз стандартный способ.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.