为了账号安全,请及时绑定邮箱和手机立即绑定

Go SQL driver get interface{} 列值

Go SQL driver get interface{} 列值

Go
动漫人物 2021-09-21 20:33:18
我正在尝试使用 go sql 驱动程序从数据库表中读取数据,并将值转换为[]map[string]interface{}. 列名是映射的键,值是interface{}。我正在将所有列添加到一个数组中。我使用https://github.com/go-sql-driver/mysql/wiki/Examples 上的“RawBytes”代码示例作为开始的示例。但是,在示例中 - 所有列值都转换string为如下所示,// Fetch rowsfor rows.Next() {    // get RawBytes from data    err = rows.Scan(scanArgs...)    if err != nil {        panic(err.Error()) // proper error handling instead of panic in your app    }    // Now do something with the data.    // Here we just print each column as a string.    var value string    for i, col := range values {        // Here we can check if the value is nil (NULL value)        if col == nil {            value = "NULL"        } else {            value = string(col) //ATTN : converted to string here        }        fmt.Println(columns[i], ": ", value)    }    fmt.Println("-----------------------------------")}有没有办法保留它,interface{}这样我就可以在使用列时进行必要的类型转换[]map[string]interface{}
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

经过长时间的斗争,我找到了解决方案。检查以下将 sql.RawBytes 转换为 Int64 的函数。这可以很容易地改变以适应任何数据类型


func GetInt64ColumnValue(payload sql.RawBytes) (int64, error) {


content := reflect.ValueOf(payload).Interface().(sql.RawBytes) // convert to bytes

data := string(content) //convert to string  

i, err := strconv.ParseInt(data,10,64)  // convert to int or your preferred data type


if err != nil {


    log.Printf("got error converting %s to int error %s ",data,err.Error())

    return 0, err

}


return i, nil

}


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信