如何将结构指针转换为go中的类型指针列表

我有一个看起来像的结构:


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... )

}


吃鸡游戏
浏览 191回答 2
2回答

月关宝盒

没有什么可以自动执行此操作,但是您可以使用reflect包编写一个函数来执行此操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go