Go:真实条件未执行

Kar*_*mar 0 go neo4j

我正在将 neo4j 用于我的一个应用程序。

运行查询后,如果找到值,result.Next()则返回bool

    var matches []int 
    fmt.Println(result.Next(), "<== result NEXT ???") //  this prints true 
    if result.Next() {
        //  for some reason this block won't run!
        fmt.Println("Assigning the values to the var")
        matches = result.Record().Values()[0].([]int)
        fmt.Println("Matches found", matches)
    }
Run Code Online (Sandbox Code Playgroud)

我真的很感激你的帮助,坚持了几个小时

icz*_*cza 5

呼叫result.Next()继续到下一行。如果调用两次,则会跳过一行。result.Next()不是幂等的!如果您只有一个结果,即调用result.Next(),则第二个调用将永远不会返回true

如果您需要在多个位置检查结果result.Next(),请将其存储在变量中:

var matches []int 
hasNext := result.Next()
fmt.Println(hasNext, "<== result NEXT ???") 
if hasNext {
    fmt.Println("Assigning the values to the var")
    matches = result.Record().Values()[0].([]int)
    fmt.Println("Matches found", matches)
}
Run Code Online (Sandbox Code Playgroud)

引用官方文档:消费结果:

for result.Next() {
    list = append(list, result.Record().Values[0].(string))
}
Run Code Online (Sandbox Code Playgroud)

如您所见,只需调用 即可迭代结果result.Next()

  • @KaranKumar 是的,这是正确的。 (2认同)