BeginTx(ctx, opts) начинает транзакцию с опциональным уровнем изоляции. Полученный sql.Tx используется для Query/Exec/Prepare в рамках транзакции. Обязательно вызывать Rollback при ошибке (через defer), иначе соединение не вернется в пул. Commit после успешных операций.
tx, err := db.BeginTx(ctx, nil)
if err != nil { return err }
defer tx.Rollback()
_, err = tx.ExecContext(ctx, "INSERT ...")
if err != nil { return err }
return tx.Commit()