go - “database/sql”的 Rows.Err() 是如何工作的?
问题描述
官方文档说(https://golang.org/pkg/database/sql/#Rows.Err):
Err 返回迭代期间遇到的错误(如果有)。Err 可以在显式或隐式关闭后调用。
这意味着在 , 期间引发的任何错误都Scan()
必须在我调用Rows.Err()
. 但这并没有发生。
这是我的代码:
for rows.Next() {
t := someStruct{}
// To simulate err, I have removed one of the field
// ie. requires 6, given 5
err = rows.Scan(&t.Field1, &t.Field2, &t.Field3, &t.Field4, &t.Field5)
if err != nil {
// Error printed by debug-
// sql: expected 6 destination arguments in Scan, not 5
log.Debug(err)
rows.Close()
break
}
templates = append(templates, &t)
}
err = rows.Err()
if err == nil {
// Execution does reach here!!
print("i donot know what went wrong here")
}
谁能帮我理解 Rows.Err() 是如何工作的?我对此有什么误解?
解决方案
Rows.Err 返回前进到下一行的错误或错误。
接下来,NextResultSet 和 Err 一起工作以启用用于遍历行和处理错误的简单代码。