go mysql 数据 json,golang查询数据返回json
在使用xorm中,有直接的方法返回map[string]string,返回map[string]interface{}時,返回的不是實際數(shù)據(jù)類型,下面的代碼用于數(shù)據(jù)同步,可以返回實際的數(shù)據(jù)類型
func GetQueryColumns(rows *sql.Rows) ([]string, map[string]string, error) {
columnTypes, err := rows.ColumnTypes()
if err != nil {
return nil, nil, err
}
length := len(columnTypes)
columns := make([]string, length)
columnTypeMap := make(map[string]string, length)
for i, ct := range columnTypes {
columns[i] = ct.Name()
columnTypeMap[ct.Name()] = ct.DatabaseTypeName()
}
return columns, columnTypeMap, nil
}
func QueryForInterface(db *sql.DB, sqlInfo string, args ...interface{}) ([]map[string]interface{}, error) {
rows, err := db.Query(sqlInfo, args...)
defer rows.Close()
if err != nil {
return nil, err
}
columns, columnTypeMap, err := GetQueryColumns(rows)
if err != nil {
return nil, err
}
columnLength := len(columns)
cache := make([]interface{}, columnLength)
for index, _ := range cache {
var a interface{}
cache[index] = &a
}
var list []map[string]interface{} //返回的切片
for rows.Next() {
_ = rows.Scan(cache...)
item := make(map[string]interface{})
for i, data := range cache {
if ct, ok := columnTypeMap[columns[i]]; ok {
if (ct == "VARCHAR" || ct == "DATETIME") && *data.(*interface{}) != nil {
item[columns[i]] = string((*data.(*interface{})).([]byte))
} else {
item[columns[i]] = *data.(*interface{})
}
} else {
item[columns[i]] = *data.(*interface{})
}
}
list = append(list, item)
}
return list, nil
}
總結(jié)
以上是生活随笔為你收集整理的go mysql 数据 json,golang查询数据返回json的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把垃圾桶改造成跑车后,这坐进去谁能分清它
- 下一篇: 1 分钟诞生一个新 GPT!3 天内定制