我有一个看起来像这样的结构:
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... )
}