code: func (tx *Tx) RunInTransaction(fn func(*Tx) error) error {
  	defer func() {
  		if err := recover(); err != nil {
  			_ = tx.Rollback()
  			panic(err)
  		}
  	}()
  	if err := fn(tx); err != nil {
  		_ = tx.Rollback()
  		return err
  	}
  	return tx.Commit()
  }
docs: // RunInTransaction runs a function in the transaction. If function
  // returns an error transaction is rollbacked, otherwise transaction
  // is committed.