go
data_error
ai_generated
true
错误:sql:事务已提交或回滚
error: sql: transaction has already been committed or rolled back
ID: go/database-sql-transaction-commit-before-rollback
80%修复率
88%置信度
0证据数
2025-06-15首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 1.20 | active | — | — | — |
| 1.21 | active | — | — | — |
根因分析
尝试提交或回滚已最终确定的事务,通常由于重复调用或逻辑错误。
English
Attempting to commit or rollback a transaction that has already been finalized, often due to double call or logic error.
解决方案
-
95% 成功率 Use a helper function to manage transaction lifecycle
func withTx(db *sql.DB, fn func(*sql.Tx) error) error { tx, err := db.Begin() if err != nil { return err } defer tx.Rollback() if err := fn(tx); err != nil { return err } return tx.Commit() }
无效尝试
常见但无效的做法:
-
Calling Rollback after Commit in defer
80% 失败
Defer executes after Commit, causing panic; use flag to check.