для работы с ними? может у кого есть примеры какие-то? а то хочется сделать, чтобы кода поменьше и чтобы удобно было..
tx := StartTransaction() defer func() { EndTransaction(tx, e) }()
и роллбек на каждом if err != nil?
ок, пасиб. кстати, а почему бы в дефер и роллбэк не положить при err != nil? она же все равно при выходе подхватится
Да и без err. Роллбэк закомиченной транзакции почти бесплатный и не является ошибкой
так то оно может и так, только нужно не закоммитить её при этом :D
ролбек и комит лежат в функции EndTransaction
т.е. е == err? в endTransaction
понял, не признал. пасиб
Можно не на каждом. А сделать func DoSomething() (err error) { if ctx, err := repo.StartTransaction(); err != nil { return nil } defer func () { if err != nil { repo.Rollback(ctx) } else { repo.Commit(ctx) } } } Для этого в принципе можно сделать обертку, чтобы не копипастить: func FinishTransaction(repo Repository, ctx context.Context, err errror) { if err != nil { repo.Rollback(ctx) } else { repo.Commit(ctx) } }
Обсуждают сегодня