
Комментарии 7
Шикарная статья! Наверное, из скользкого не затронут только указатель на интерфейс, хотя на практике не особо-то и нужно. Может Вы так же «разберётесь» и с шаблонами?
Создадим интерфейс
UserProvider, в котором будет методUser()
И всё равно у пакета осталась связка со storage/users - хотя бы потому, что там описан возвращаемый тип данных.
Допустим, мы хотим передать вместо сущности
PostgresсущностьRedis. Чтобы соответствовать данному интерфейсу, нам придется реализовать все его методы, даже если они не используются.
Хм... storage/users/postgres, storage/users/redis... на мой вкус так и задумывалось, что все эти сущности реализуют интерфейс storage/users.Storage. Или, как минимум, в storage/users должно быть два интерфейса - Data и, например, Cache. Тогда users/postgres и users/mysql реализуют интерфейс Data, а users/redis - интерфейс Cache. А иначе может быть как-то ни разу не очевидно зачем нужна такая вот странная структура
users.go: Файл с реализацией интерфейсов для работы с пользователями.
Разрешите доколебаться: это не реализация, это описание
Ну наконец в одном месте собрано все что надо для интефейсов на го.
Уточнение: интерфейсы в Go это структурная типизация, то же самое что и утиная для языков c динамической типизацией.
Наверное в описании структуры проекта лучше заменить "Папка" на "Пакет"
Например:
users/: Пакет для управления пользователями.Классная статья. Доступно написано!
Погружение в интерфейсы Go