Где объявлять интерфейс в Go
Вопрос
Где по идиомам Go обычно объявляют интерфейс для репозитория пользователей?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- В пакете-потребителе (сервисе), только с нужными методамиправильный ответ
- В пакете с реализацией, рядом со структурой, со всеми её методами
- В отдельном пакете interfaces, общем для всего проекта
- Интерфейс не нужен, мокать в Go принято через monkey patching
Разбор
Интерфейсы в Go реализуются неявно, поэтому их удобно объявлять у потребителя: сервису нужно два метода, он и объявляет интерфейс из двух методов. Реализация остаётся структурой, а мок в тестах пишется за минуту. Большой интерфейс рядом с реализацией и общий пакет interfaces характерны для Java-подхода и создают лишние связи. Мокать через интерфейсы как раз стандартный способ.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Проверка реализации интерфейса при компиляции
Следующий вопрос
Встраивание: чей метод вызовется
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error