首页 > 解决方案 > “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() 是如何工作的?我对此有什么误解?

标签: go

解决方案


Rows.Err 返回前进到下一行的错误或错误。

接下来,NextResultSet 和 Err 一起工作以启用用于遍历行和处理错误的简单代码。


推荐阅读