我正在尝试使用 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
}
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报
0/150
提交
取消