Why defer a Rollback?
The important thing is that if you defer tx.Rollback()
you are sure that it will be called even if you do an early return and the "trick" is that calling tx.Rollback()
on a committed transaction will not actually do the rollback, because once a transaction is committed, it's committed and there is no way to roll it back :)
So this is a neat trick on how to keep the code simple.
The example is a little bit misleading. It uses log.Fatal(err)
for error handling. You wouldn't normally do that, and instead return err
. So the deferred rollback is there to ensure that the transaction is rolled back in case of an early return.