go语言数据库查询结果转换为自定义分组结构体详解
本文将详细讲解如何将MySQL数据库查询结果转换为Go语言中预定义的自定义分组结构体。核心在于高效处理数据分组和结构转换。
假设MySQL数据库查询结果如下:
<code>{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"},</code>目标是将其转换为以下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号