我有一个看起来像这样的结构:
type inv struct {
ID int `json:"id"`
Name string `json:"name"`
}
我正在查询数据库中的一些数据(假设没有错误):
rows, err := db.Query("select id, name from inv_table")
通常情况下,我必须通过扫描
从行中提取数据var i inv
for rows.Next() {
rows.Scan(&i.ID, &i.Name)
}
我认为这可能有用(明天要测试):
var i inv
for rows.Next() {
var x []interface{} = [&i.ID, &i.Name]
rows.Scan(x... )
}
实际上,我在查询的结果集中有更多列。
rows.Scan(&i)
或至少:
rows.Scan(getExportedValuePointers(&i)... )
我想我总是可以写一些编码器,但是,在我看来,盒子里应该有一些东西。
**我意识到我总能编写一些类似于encode / xml或encode / json的反射代码......但我希望有人已经完成了它。
更新:以下代码按预期工作,但不是我想要的:
package main
import "fmt"
type inv struct {
A int
B string
}
func main() {
var i inv
fmt.Printf("hello\n")
n, err := fmt.Sscan("1 c", &i.A, &i.B)
fmt.Printf("retval: %d %#v\n", n, err)
fmt.Printf("retval: %d, %s, %d %#v\n", i.A, i.B, n, err)
j := []interface{}{&i.A, &i.B}
k := []interface{}{i.A, i.B}
n, err = fmt.Sscan("2 d", j... )
fmt.Printf("retval: %d, %s, %d %#v\n", i.A, i.B, n, err)
fmt.Printf("retval: %d, %s\n", k... )
}
答案 0 :(得分:2)
如果您正在寻找一个能够自动将SQL查询绑定到“inv”结构的包,那么请看一下gorp:
答案 1 :(得分:0)
没有什么可以自动执行此操作,但您可以使用reflect包编写函数来执行此操作。