go语言数据库查询结果转换为自定义分组结构体详解
本文将详细讲解如何将MySQL数据库查询结果转换为Go语言中预定义的自定义分组结构体。核心在于高效处理数据分组和结构转换。
假设MySQL数据库查询结果如下:
{id:1,username:'xx',age:xx,frist_name:"a"}, {id:2,username:'xx',age:xx,frist_name:"b"}, {id:3,username:'xx',age:xx,frist_name:"a"},
目标是将其转换为以下Go结构体:
type myLists struct { FristName string `json:"frist_name"` Lists []userLists `json:"lists"` } type userLists struct { Id string `json:"id"` Username string `json:"username"` Age string `json:"age"` }
期望的JSON输出格式:
立即学习“go语言免费学习笔记(深入)”;
[ { "frist_name": "a", "lists": [ { "id": "1", "username": "xxx", "age": "xxx" }, { "id": "3", "username": "xxx", "age": "xxx" } ] }, { "frist_name": "b", "lists": [ { "id": "2", "username": "xxx", "age": "xxx" } ] } ]
实现步骤:
type r struct { Id uint64 `json:"id"` Username string `json:"username"` Age string `json:"age"` FristName string `json:"frist_name"` }
package main import ( "encoding/json" "fmt" ) // ... (myLists and userLists definitions as above) ... func transformData(data []r) ([]myLists, error) { result := make(map[string]myLists) for _, item := range data { key := item.FristName if _, ok := result[key]; !ok { result[key] = myLists{FristName: key} } result[key].Lists = append(result[key].Lists, userLists{Id: fmt.Sprint(item.Id), Username: item.Username, Age: item.Age}) } var finalResult []myLists for _, v := range result { finalResult = append(finalResult, v) } return finalResult, nil } func main() { rss := []string{ `{"id":1,"username":"xx","age":"xx","frist_name":"a"}`, `{"id":2,"username":"xx","age":"xx","frist_name":"b"}`, `{"id":3,"username":"xx","age":"xx","frist_name":"a"}`, } var data []r for _, rs := range rss { var t r err := json.Unmarshal([]byte(rs), &t) if err != nil { fmt.Println("Unmarshal error:", err) return } data = append(data, t) } transformedData, err := transformData(data) if err != nil { fmt.Println("Transform error:", err) return } jsonData, err := json.MarshalIndent(transformedData, "", " ") if err != nil { fmt.Println("Marshal error:", err) return } fmt.Println(string(jsonData)) }
这段代码首先使用map进行分组,避免了原代码中冗余的循环查找。 transformData 函数将中间结构体 r 的 slice 转换为 myLists 的 slice。main 函数模拟数据库查询结果,并调用 transformData 函数进行转换,最后将结果转换为 JSON 格式输出。 请将 rss 替换为实际的数据库查询代码。 记住处理潜在的错误,例如数据库连接错误和JSON解析错误。 fmt.Sprint(item.Id) 将 uint64 类型的 ID 转换为字符串,与目标 JSON 结构匹配。
以上就是Go语言中如何将数据库查询结果转换为自定义分组结构体?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号