Golang-Row Data Parse to Map

之前在做erp系统内的SmartQuery功能
需要从资料库里面捞出来query并且显示结果
但使用gorm必须要事先定义struct,于是上网搜寻找到了这个方法(原文)

好处在于

程式非常抽象,只需关注在Query上解决raw query使用select时不知道会有哪些column,需要事先定义struct的问题
// RawQuerySearchAndParseToMap ...func RawQuerySearchAndParseToMap(db *gorm.DB, query string) ([]map[string]interface{}, error) {//Use raw queryrows, err := db.Raw(query).Rows()if err != nil {log.Println(err)return nil, err}//取得搜寻回来的资料所拥有的columncolumns, er := rows.Columns()if er != nil {log.Println(er)return nil, er}columnLength := len(columns)//make一个临时储存的地方,并赋予指标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 {item[columns[i]] = *data.(*interface{}) //column可能有许多种data type,因此在这取出时不指定型别,否则会转换错误,且在这取出时为uint8(btye array)格式}list = append(list, item)}//将byte array转换为字串for index := range list {for _, column := range columns {list[index][column] = list[index][column].(string)}}return list, nil}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章