我有一个结构,看起来像:如何将结构指针转换为指针类型的列表中去
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的反射代码......但我希望有人已经完成了它。
UPDATE:下面的代码工作正常,但不是因为我想:
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...)
}
您是否试图从下拉数据行该数据库并只根据特定列而不是所有列创建“inv”类型的切片? – Nucleon