go runtime_error ai_generated true

sql: 行已关闭

sql: Rows are closed

ID: go/database-sql-rows-closed

其他格式: JSON · Markdown 中文 · English
80%修复率
87%置信度
0证据数
2024-01-30首次发现

版本兼容性

版本状态引入弃用备注
1.15 active
1.20 active

根因分析

在 sql.Rows 对象已关闭后(显式关闭或由于错误)尝试调用 Next() 或 Scan()。

English

Attempting to call Next() or Scan() on a sql.Rows object after it has been closed, either explicitly or due to an error.

generic

解决方案

  1. 95% 成功率
    Always check errors and call rows.Close() in defer: defer rows.Close(); for rows.Next() { ... }
  2. 90% 成功率
    Check rows.Err() after iteration: if err := rows.Err(); err != nil { handleErr(err) }

无效尝试

常见但无效的做法:

  1. 90% 失败

    Rows are already closed; further calls will panic or return stale data.

  2. 60% 失败

    May cause data inconsistency and resource leaks if not handled properly.