本文介绍如何将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 mainimport ( "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转换为自定义结构体切片?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2538172.html