code: func (engine *Engine) Transaction(f func(*Session) (interface{}, error)) (interface{}, error) {
  	session := engine.NewSession()
  	defer session.Close()
  
  	if err := session.Begin(); err != nil {
  		return nil, err
  	}
  
  	result, err := f(session)
  	if err != nil {
  		return nil, err
  	}
  
  	if err := session.Commit(); err != nil {
  		return nil, err
  	}
  
  	return result, nil
  }
docs: // Transaction Execute sql wrapped in a transaction(abbr as tx), tx will automatic commit if no errors occurred