douju6850 2015-06-15 21:45
浏览 57
已采纳

将sqlx.Rows.StructScan用于接口args

I need to use StructScan function for interface (pointer to struct). But if I try to reflect value, I've got error, because reflect.New() returning reflect.Value type. How I can scan structure and store data into 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

        }
    }
}
  • 写回答

1条回答 默认 最新

  • dqsvnsad79721 2015-06-16 15:56
    关注

    Solved

    // 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()))
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 如何实现uniapp编译的微信小程序做可回溯视频
  • ¥15 求Houdini使用行家,付费。价格面议。
  • ¥15 AttributeError: 'EasyDict' object has no attribute 'BACKUP_DB_INFO'
  • ¥15 前端高拍仪调用问题报错
  • ¥15 想用octave解决这个数学问题
  • ¥15 Centos新建的临时ip无法上网,如何解决?
  • ¥15 海康威视如何实现客户端软件对设备语音请求的处理。
  • ¥15 支付宝h5参数如何实现跳转
  • ¥15 MATLAB代码补全插值
  • ¥15 Typegoose 中如何使用 arrayFilters 筛选并更新深度嵌套的子文档数组信息