本文介绍如何将Go语言中从MySQL数据库查询得到的列表数据转换为自定义结构体切片。假设数据库查询返回的数据类似于{id:1, username:'xx', age:xx, frist_name:"a"},目标是将其转换为特定JSON格式,包含frist_name字段和一个包含用户信息的结构体切片lists。
为此,我们需要定义两个结构体:UserLists和myLists。UserLists存储用户信息(id, username, age),myLists包含frist_name和UserLists结构体切片lists。最终目标是将数据库查询结果转换为myLists结构体切片。

以下代码演示转换过程:
package main
import (
"encoding/json"
"fmt"
)
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"}`,
}
type r struct {
Id uint64 `json:"id"`
Username string `json:"username"`
Age string `json:"age"`
FristName string `json:"frist_name"`
}
type UserLists struct {
Id uint64 `json:"id"`
Username string `json:"username"`
Age string `json:"age"`
}
type myLists struct {
FristName string `json:"frist_name"`
Lists []UserLists `json:"lists"`
}
var resp []myLists
// 使用map进行分组,提高效率
firstNameMap := make(map[string][]UserLists)
for _, rs := range rss {
var t r
err := json.Unmarshal([]byte(rs), &t)
if err != nil {
fmt.Println("Unmarshal error:", err)
return
}
tul := UserLists{Id: t.Id, Username: t.Username, Age: t.Age}
firstNameMap[t.FristName] = append(firstNameMap[t.FristName], tul)
}
for firstName, userList := range firstNameMap {
resp = append(resp, myLists{FristName: firstName, Lists: userList})
}
// 将结果转换为JSON格式输出
jsonData, err := json.MarshalIndent(resp, "", " ")
if err != nil {
fmt.Println("Marshal error:", err)
return
}
fmt.Println(string(jsonData))
}代码首先模拟数据库查询结果,实际应用中需替换为数据库查询代码。然后,代码遍历模拟数据,使用json.Unmarshal将JSON字符串转换为r结构体,再将r结构体数据填充到UserLists结构体。最后,代码根据frist_name将UserLists结构体添加到对应的myLists结构体中。 最终结果resp是一个myLists结构体切片,包含所需数据结构。最后,代码使用json.MarshalIndent将结果转换为格式化的JSON字符串输出。 改进后的代码使用了map进行分组,避免了多次遍历,提高了代码效率。
立即学习“go语言免费学习笔记(深入)”;
以上就是Go语言中如何将MySQL查询结果List转换为自定义结构体切片?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号