go-gf框架查询结果数组里套数组 数据和方法

news/2024/11/19 19:39:48/

数据

type ObtainClassificationRes struct {Id        int          `json:"id" dc:"用户名"`Name      string       `json:"name" dc:"标题"`Introduce string       `json:"introduce" dc:"介绍"`Picture   string       `json:"picture" dc:"图片"`Vip       int          `json:"vip" dc:"vip:0普通1vip"`LabelData []*LabelItem `json:"label_data" dc:"标签结构体"`// Add more fields if necessary
}type LabelItem struct {Id        int    `json:"id" dc:"用户名"`SortId    int    `json:"sort_id" dc:"分类id"`Vip       int    `json:"vip" dc:"vip:0普通1vip"`Name      string `json:"name" dc:"标题"`Introduce string `json:"introduce" dc:"介绍"`Picture   string `json:"picture" dc:"图片"`// Add more fields if necessary
}

方法

func (s *sAppuserContent) ObtainClassification(ctx context.Context, req *appuser.ObtainClassificationReq) (res *appuser.ObtainClassificationRes, err error) {err = g.Try(ctx, func(ctx context.Context) {appAiSortList, err := systemdao.AppAiSort.Ctx(ctx).WithAll().All()if err != nil {// 错误处理err = fmt.Errorf("获取分类数据失败: %v", err)return}// 定义结果列表resultList := make([]*model.ObtainClassificationRes, len(appAiSortList))for i, appAiSort := range appAiSortList {fmt.Printf("appAiSort", appAiSort)fmt.Printf("ortID", appAiSort["id"].Int())// 查询每个分类下的标签数据appAiLabelList, err := systemdao.AppAiLabel.Ctx(ctx).WithAll().Where(systemdao.AppAiLabel.Columns().SortId, appAiSort["id"].Int()).All()if err != nil {// 错误处理err = fmt.Errorf("获取分类下的标签数据失败: %v", err)return}// 构建 LabelData 数组labelData := make([]*model.LabelItem, len(appAiLabelList))for j, appAiLabel := range appAiLabelList {// 将查询到的标签数据转换为 LabelItem 结构体labelData[j] = &model.LabelItem{Id:        appAiLabel["id"].Int(),SortId:    appAiLabel["sort_id"].Int(),Vip:       appAiLabel["vip"].Int(),Name:      appAiLabel["name"].String(),Introduce: appAiLabel["introduce"].String(),Picture:   appAiLabel["picture"].String(),}}// 构建 ObtainClassificationRes 结构体obtainClassificationRes := &model.ObtainClassificationRes{Id:        appAiSort["id"].Int(),Name:      appAiSort["name"].String(),Introduce: appAiSort["introduce"].String(),Picture:   appAiSort["picture"].String(),Vip:       appAiSort["vip"].Int(),LabelData: labelData,// Add more fields if necessary}// 将 obtainClassificationRes 添加到结果列表中resultList[i] = obtainClassificationRes}res = &appuser.ObtainClassificationRes{List: resultList,// Add more fields if necessary}})return
}

api

// ObtainClassificationReq 获取首页分类标签信息请求参数
type ObtainClassificationReq struct {g.Meta `path:"/ObtainClassification" tags:"客户端ai分类模块" method:"post" summary:" 获取首页分类标签信息"`commonApi.Author
}// ObtainClassificationRes 获取首页分类标签信息返回结果
type ObtainClassificationRes struct {g.Meta `mime:"application/json"`commonApi.ListResList []*model.ObtainClassificationRes `json:"list"`
}

controller

// 获取首页分类标签信息
func (c *appuserGenController) ObtainClassification(ctx context.Context, req *appuser.ObtainClassificationReq) (res *appuser.ObtainClassificationRes, err error) {res, err = service.AppuserContent().ObtainClassification(ctx, req)return}

解释

  1. 获取分类数据:

    • 通过执行 SQL 查询语句 SELECT * FROM app_ai_sort ORDER BY priority DESC 从数据库中获取分类数据。
    • 使用 g.DB().Query(ctx, sql) 函数执行查询,并将结果保存在 appAiSortList 变量中。
    • 如果查询过程中出现错误,将错误信息保存在 err 变量中,并提前返回。
  2. 构建结果列表:

    • 使用 make([]*model.ObtainClassificationRes, len(appAiSortList)) 创建一个长度为 appAiSortList 的切片,用于存储结果列表。
    • 结果列表中的每个元素都是类型为 model.ObtainClassificationRes 的指针。
  3. 遍历分类数据并获取每个分类下的标签数据:

    • 使用 for i, appAiSort := range appAiSortList 循环遍历分类数据列表。
    • 在每次循环中,通过执行 SQL 查询语句 SELECT * FROM app_ai_label WHERE sort_id = %d ORDER BY priority DESC 获取与当前分类关联的标签数据,其中 %d 会被当前分类的 ID 替代。
    • 使用 g.DB().Query(ctx, sql) 函数执行查询,并将结果保存在 appAiLabelList 变量中。
    • 如果查询过程中出现错误,将错误信息保存在 err 变量中,并提前返回。
  4. 构建标签数据数组:

    • 使用 make([]*model.LabelItem, len(appAiLabelList)) 创建一个长度为 appAiLabelList 的切片,用于存储标签数据数组。
    • 标签数据数组中的每个元素都是类型为 model.LabelItem 的指针。
  5. 转换标签数据为结构体:

    • 使用 for j, appAiLabel := range appAiLabelList 循环遍历标签数据列表。
    • 在每次循环中,将查询到的标签数据转换为 model.LabelItem 结构体的实例,并将其赋值给标签数据数组的对应元素。
    • 转换过程中,将数据库查询结果中的字段值赋值给 model.LabelItem 结构体中相应的字段。
  6. 构建 ObtainClassificationRes 结构体:

    • 使用查询到的分类数据和标签数据构建 ObtainClassificationRes 结构体的实例。
    • 在构建过程中,将分类数据中的字段值赋值给 ObtainClassificationRes 结构体中相应的字段,同时将标签数据数组赋值给 LabelData 字段。
  7. ObtainClassificationRes 添加到结果列表中:

    • 将构建好的 ObtainClassificationRes 实例添加到结果列表的对应位置。
  8. 构建响应对象:

    • 使用 &appuser.ObtainClassificationRes{List: resultList} 创建一个 appuser.ObtainClassificationRes 的实例,并将结果列表赋值给 List 字段。
  9. 返回结果:

    • 将构建好的响应对象 res 和可能发生的错误 err 返回给调用方。

整个代码的目的是获取分类数据和对应的标签数据,并将它们组装成一个结构化的响应对象,以便返回给调用方。具体步骤包括查询分类数据和标签数据,将它们转换为相应的结构体,并将它们组合成一个包含结果列表的响应对象。这样做可以提供给调用方一个完整的分类数据和标签数据的信息,以便进一步处理和使用。


http://www.ppmy.cn/news/75764.html

相关文章

消息hook

一、消息hook的定义 消息 Hook(Message Hook)是一种编程技术,用于拦截、监视和处理计算机程序中传递的消息或事件。它通常用于操作系统、图形界面框架、应用程序框架等软件系统中,允许开发人员在特定的事件发生时执行自定义代码。…

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…

电动力学专题:闵氏几何(伪欧几何)

相对性原理和光速不变 物理定律在所有的惯性参考系里都是平等的&#xff0c;不存在一个特殊的惯性系。真空中的光速在所有的惯性系里都是一样的。 洛伦兹变换 距离度量&#xff1a;闵氏(Mins geometry) 狭义相对论下&#xff0c;不随惯性系变化的量闵式距离&#xff08;时空间…

如何避免孩子独自在家偷偷使用电脑?

电脑为我们的生活带来了极大的便利&#xff0c;但是对于孩子来说&#xff0c;过早的接触网络很容易影响其健康的成长。家长在家的话&#xff0c;还可以监督孩子&#xff0c;但如果家长出门了&#xff0c;该如何避免孩子偷偷使用电脑呢&#xff1f;其实方法很简单&#xff0c;只…

Redis7学习总结

目录 第一章&#xff1a;配置 一、常用命令 二、配置步骤 三、连接后的操作 第二章&#xff1a;数据类型 一、十大数据类型 二、常用命令 三、String类型 1、set key value 选项 2、get 3、value加减&#xff08;需要是数字类型&#xff09; 4、获取当前value长…

MIT6.824 lecture5上课笔记(涉及到Lab2A)- Go threads and raft

总结&#xff1a;本节课讲解了一些会在lab2中使用到的go的多线程技巧&#xff0c;会给一些简单的demo&#xff0c;lab2中可能会借鉴这些demo。 详细的Lab2 raft算法实现源码&#xff0c;请参考我的个人仓库&#xff08;记得点颗星星&#xff09;, 配合readme食用更佳。 MIT6.…

spring中怎样优化第三方bean?

需求:将数据库连接四要素提取到properties配置文件&#xff0c;spring来加载配置信息并使用这些信息来完成属性注入。第三方bean属性优化的思路如下&#xff1a; 1.在resources下创建一个jdbc.properties(文件的名称可以任意) 2.将数据库连接四要素配置到配置文件中 3.在Spr…

Android,原生启动页面和Flutter Splash页面存在偏差问题解决

Android&#xff0c;原生启动页面和Flutter Splash页面存在偏差问题解决 项目一直存在一个比较尴尬的问题&#xff1a;就是点击应用程序时&#xff0c;原生启动页和Flutter加载页明明用的是同一张图片&#xff0c;但是每次启动的时候总是会存在偏差&#xff0c;图片中间的Logo…