package db import ( "context" ) func (c *Client) WithTx(ctx context.Context, fn func(tx *Client) error) error { tx, err := c.pool.Begin(ctx) if err != nil { return err } // 创建事务 client txClient := &Client{ pool: c.pool, tx: tx, } // rollback 兜底(防 panic / 提前 return) defer func() { _ = tx.Rollback(ctx) }() // 执行业务 if err := fn(txClient); err != nil { _ = tx.Rollback(ctx) return err } // commit if err := tx.Commit(ctx); err != nil { _ = tx.Rollback(ctx) return err } return nil }