АД
type UserRepository interface {
FindAll() ([]*model.User, error)
FindByEmail(email string) (*model.User, error)
Save(*model.User) error
}
Если нужны распределенные транзакции между репозиториями, то пришлось бы заморочиться. но sql.Tx я бы не вытаскивал наружу. Пусть будет много транзакций, переживем. Потому что репозиторий - абстракция, в которой сокрыто как хранятся данные. Тайна за семью замками. Когда реализация вылезает снаружи, становится сложно поддерживать. Но это чисто мои теоретические рассуждения. Такие задачи не приходилось реализовывать.