使用 sqlx.Rows.StructScan 作为接口参数

Using sqlx.Rows.StructScan for interface args

我需要为接口(指向结构的指针)使用 StructScan 函数。 但是如果我试图反映价值,我就会出错,因为 reflect.New() 返回 reflect.Value 类型。我如何扫描结构并将数据存储到 dest var?

// package 1
type Data struct {
    id int `db:"id"`
    caption string `db:"caption"`
}

func Func1 {
    data := []Data{}
    GetData(&data)
    log.Println(data)
}

// package 2
func GetData(sql string, dest interface{}) {
    rows, err := DBI.Queryx(sql)
    if err == nil {
        // reflect.Value
        myData := reflect.New(reflect.TypeOf(dest).Elem().Elem())
        for rows.Next() {
            rows.StructScan(&myData) // Fail here

        }
    }
}

已解决

// package 2
func GetData(sql string, dest interface{}) {
    arr := reflect.ValueOf(dest).Elem()
    v := reflect.New(reflect.TypeOf(dest).Elem().Elem())
    rows, err := DBI.Queryx(sql)
    if err == nil {
        if err = rows.StructScan(v.Interface()); err == nil {
            arr.Set(reflect.Append(arr, v.Elem()))
        }
    }
}