行。下一步转到列表的末尾,而不让您回到开头吗?我想运行一个查询,检查数据库中是否存在特定对象的数据。如果有该对象,我想对其进行更新。如果不存在,我想插入一个新行。所以我这样做:

    rows, err := db.Query(query)
    if err != nil {
        Error.Printf("error querying: %v", err)
    }

    if !rows.Next() {
        // insert new data
    }

像我期望的那样独立工作。但是如果我改为这样做,并且在代码片段的末尾有更多逻辑:
    rows, err := db.Query(query)
    if err != nil {
        Error.Printf("error querying: %v", err)
    }

    if !rows.Next() {
        // insert new data
    }
    for rows.Next() {
        fmt.Println("-----")
        // do update
    }

我的for rows.Next()永远不会输入。如果我将for rows.Next()块移到if !rows.Next()块上方,则它确实可以正常工作。那么,当您调用Next()再次读取查询时,是否会发生某些事情?提前致谢。

最佳答案

您可能想要这样的东西:

rows, err := db.Query(query)
if err != nil {
    Error.Printf("error querying: %v", err)
}
shouldinsert := true
for rows.Next() {
    shouldinsert = false
    fmt.Println("-----")
    // do update
}
if shouldinsert {
    // insert new data
}

07-27 13:42