Обновить
0

Пользователь

Отправить сообщение

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

код
type UserRepo interface {
    GetByID(...)
    Save(...)
}


func (t *TX) InTx(ctx context.Context, f func(repo UserRepo)) error {
	pool, ok := t.fb.(*DB)
	tx, err := pool.Begin(ctx)
	defer tx.Rollback(ctx)
	f(ctx, NewUserRepo(tx))
	tx.Commit(ctx)
}

есть свои минусы, например то, что в замыкании можно случайно вызвать репозиторий у которого коннект не в транзакции

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность