我找到了关于how to call the Scan variadic function in Golang using reflection的答案。而且那里没有声望要问。
这里是代码的主要部分:
values := make([]interface{}, count)
valuePtrs := make([]interface{}, count)
for rows.Next() {
for i, _ := range columns {
valuePtrs[i] = &values[i]
}
rows.Scan(valuePtrs...)
...
}
而且我不明白为什么必须将此语句循环?为什么
for
在for rows.Next
中?for rows.Next() {
for i, _ := range columns { valuePtrs[i] = &values[i] }
..
}
在golang中的每次迭代中valuePtrs会有所不同吗?还是只是错误?
最佳答案
据我了解:https://golang.org/pkg/database/sql/#Rows.Scan
“扫描将当前行中的列复制到dest所指向的值中。”
当您在特定字段中传递它时,可以使用:
rows.scan(&myfield1, &myfield2)
但是在您的实例中,您正在传递一个数组,而该数组的地址并不是您真正想要发送的,Rayfen在上面的评论中是正确的-
考虑替代方案:
rows.scan(&values)
那将是一个指向单个对象的指针,而不是真正的指针数组,因此您必须执行该循环,以便可以发送指向目标变量的指针数组,而不是指向该数组的指针。
关于database - 如何使用不带循环ptrs的反射调用Golang中的Scan variadic函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46121289/