2012-12-11 45 views
2

我有一个结构,看起来像:如何将结构指针转换为指针类型的列表中去

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...) 
} 
+0

您是否试图从下拉数据行该数据库并只根据特定列而不是所有列创建“inv”类型的切片? – Nucleon

回答

2

如果你正在寻找将您的SQL查询自动绑定到你的“INV”结构封装,然后看看GORP:

https://github.com/coopernurse/gorp

+0

虽然Gorp不是我正在寻找的实际答案是在Gorp里面。谢谢。 – Richard

+0

更新:gorp工作。 – Richard

0

没有什么可以自动做到这一点,但你可以使用反映包做写一个函数。

相关问题