Go 语言返回组装数据

 

文章id
文章标题
.....
分类 字段 :[
        分类名
        ,分类描述
....
]

标签字段 :
[
 标签名,
标签id
.....
]




type ArticleWithCategoryLabel struct {
	system.SysArticle
	CategoryName system.SysCategorie `json:"category_name"`
	LabelName    system.SysLabel     `json:"label_name"`
}





// 文章
func ListSortArticle(c *gin.Context) {

	//查询所有的文章
	var articles []system.SysArticle
	if err := global.GVA_DB.Find(&articles).Error; err != nil {
		response.FailWithMessage("获取文章数据失败", c)
		return
	}

	// 查询所有分类
	var categories []system.SysCategorie
	if err := global.GVA_DB.Find(&categories).Error; err != nil {
		response.FailWithMessage("获取分类数据失败", c)
		return
	}

	// 查询所有标签
	var labels []system.SysLabel
	if err := global.GVA_DB.Find(&labels).Error; err != nil {
		response.FailWithMessage("获取标签数据失败", c)
		return
	}

	// 构建分类和标签的映射  将所有的分类 , 标签 放到 Map 中
	categoryMap := make(map[int64]system.SysCategorie)
	labelMap := make(map[int64]system.SysLabel)
	for _, category := range categories {
		categoryMap[int64(category.ID)] = category
	}
	for _, label := range labels {
		labelMap[int64(label.ID)] = label
	}





	// 为每篇文章添加分类名称和标签名称
	var articlesWithDetails []ArticleWithCategoryLabel
	for _, article := range articles {
		// 获取分类名称    筛选出每篇文章对应的分类
		category, ok := categoryMap[article.SortID]
		if !ok {
			continue // 如果找不到分类,跳过这篇文章
		}

		// 获取标签名称 筛选出每篇文章对应的分类
		label, ok := labelMap[article.LabelID]
		if !ok {
			continue // 如果找不到标签,跳过这篇文章
		}

		// 添加到结果列表
		articlesWithDetails = append(articlesWithDetails, ArticleWithCategoryLabel{
			SysArticle:   article,
			CategoryName: category,  注意定义的是结构体 返回的文章的分类只有一个  多个使用切片
			LabelName:    label,
		})
	}

	// 准备最终的响应数据  定义一个切片
	var finalResponse map[int64][]ArticleWithCategoryLabel = make(map[int64][]ArticleWithCategoryLabel)
	for _, articleDetail := range articlesWithDetails {
		// 检查 finalResponse 中是否存在 articleDetail.SortID 的条目
		if _, exists := finalResponse[articleDetail.SortID]; !exists {
			// 如果不存在,初始化一个空切片  相当于php 数组的键  index
			finalResponse[articleDetail.SortID] = []ArticleWithCategoryLabel{}
		}
		// 添加 articleDetail 到对应的切片中  相当于php 的值 value
		finalResponse[articleDetail.SortID] = append(finalResponse[articleDetail.SortID], articleDetail)
	}

	// 返回成功响应
	response.OkWithDetailed(finalResponse, "获取数据成功", c)

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/797856.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年7月13日全国青少年信息素养大赛Python复赛小学高年级组真题

第一题 题目描述 握情况。他决定让每个人输入一个正整数 N (0≤N≤1000),然后计算并输出(5*N)的值。请用 在一个神秘的王国里,国王希望通过一个简单的测试来评估他的子民对基 础数学运算的掌 Python 编写程序,程序执行后要求用户输入一个正…

50、haproxy+keepalive+nginx

keepalivehaproxy 客户端:192.168.168.21haproxy1:192.168.168.43haproxy2:192.168.168.44vip:192.168.168.100nginx1:192.168.168.31nginx2:192.168.168.32haproxykeepalive做高可用nginx做后台haproxy1haproxy2一起操作&#x…

121. 小红的区间翻转(卡码网周赛第二十五期(23年B站笔试真题))

题目链接 121. 小红的区间翻转(卡码网周赛第二十五期(23年B站笔试真题)) 题目描述 小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j],&#x…

监控房价和挂牌数量的工具-以成都房价为例

介绍 本文将介绍如何通过zervice提供的工具来监控成都房价(其他城市或者地区类似),包括价格和挂牌数量。可以对购房一族提供数据参考。 数据来源 数据来源方面,本文以成都为例,我们会使用链家数据-> 选择地图找房…

《Linux系统编程篇》Visual Studio Code配置下载,中文配置,连接远程ssh ——基础篇

引言 vscode绝对值得推荐,非常好用,如果你能体会其中的奥妙的话。 工欲善其事,必先利其器 ——孔子 文章目录 引言下载VS Code配置VS Code中文扩展连接服务器 连接服务器测试确定服务器的IP地址VS code 配置ssh信息选择连接到主机选择这个添…

【JVM实战篇】内存调优:内存泄露危害+内存监控工具介绍+内存泄露原因介绍

文章目录 内存调优内存溢出和内存泄漏内存泄露带来什么问题内存泄露案例演示内存泄漏的常见场景场景一场景二 解决内存溢出的方法常用内存监控工具Top命令优缺点 VisualVM软件、插件优缺点监控本地Java进程监控服务器的Java进程(生产环境不推荐使用) Art…

微信小程序毕业设计-青少年科普教学系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

ubuntu服务器安装labelimg报错记录

文章目录 报错提示查看报错原因安装报错 报错提示 按照步骤安装完labelimg后,在终端输入labelImg后,报错: (labelimg) rootinteractive59753:~# labelImg ………………Got keys from plugin meta data ("xcb") QFactoryLoader::Q…

ArrayList模拟实现

ArrayList模拟实现 ArrayList 的初步介绍常见操作 ArrayList 的简单模拟实现 ArrayList 的初步介绍 ArrayList也叫做顺序表,底层是一个数组。 在创建顺序表 时就应该规定 里面元素的数据类型,其中不能直接传基本数据类型,例如int、char。需要…

VS编译和使用modbus库

一.libmodbus 库 免费的开源的,modbus 开发库,支持 RTU 和 TCP 官网:libmodbus.org 在线文档:https://libmodbus.org/reference/ 二.源码简介 项目说明doc 目录各 API 接口的详细说明文档src 目录源码都在这个目录下tests 目录…

06 人以群分 基于邻域的协同过滤算法

这一讲我们将正式进入算法内容的学习。 推荐算法本质 推荐算法本质上是一一种信息处理方法,它将用户信息和物品信息处理后,最终输出了推荐结果。因为 05 讲中基于热门推荐、基于内容推荐、基于关联规则推荐等方法比较粗放,所以推荐结果往往…

C语言 | Leetcode C语言题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; const int BIG 1 << 30;bool isPowerOfTwo(int n) {return n > 0 && BIG % n 0; }

Study--Oracle-07-ASM自动存储管理(二)

一、ASM安装准备条件 1、ASM支持存储类型 本地祼设备&#xff08;本地的磁盘和分区&#xff09; 网络附加存储(NAS) 存储区域网络(SAN) 2、ASM使用本地裸设备&#xff0c;要点: 已经被挂载到操作系统上或者已经做了分区 映射裸设备为文件名 设置正确的权限&#xff08;针对g…

C++继承和多态

目录 继承 继承的意义 访问限定符、继承方式 赋值兼容规则&#xff08;切片&#xff09; 子类的默认成员函数 多继承 继承is a和组合has a 多态 什么是多态 形成多态的条件 函数重载&#xff0c;隐藏&#xff0c;重写的区别 override和final 多态原理 继承 继承的…

矩阵管理系统实现后台统一管理的解决方案

在当今数字化浪潮中&#xff0c;企业面临着前所未有的挑战与机遇。如何快速响应市场变化、提升运营效率、降低管理成本&#xff0c;成为众多企业关注的焦点。而矩阵管理系统作为一种新兴的管理工具&#xff0c;凭借其强大的后台统一管理能力&#xff0c;正成为越来越多企业的首…

【Redis】复制(Replica)

文章目录 一、复制是什么&#xff1f;二、 基本命令三、 配置&#xff08;分为配置文件和命令配置&#xff09;3.1 配置文件3.2 命令配置3.3 嵌套连接3.4 关闭从属关系 四、 复制原理五、 缺点 以下是本篇文章正文内容 一、复制是什么&#xff1f; 主从复制 master&#xff…

基于javaScript的冒泡排序

目录 一.前言 二.设计思路和原理 三.源代码展示 四. 案例运行结果 一.前言 冒泡排序简而言之&#xff0c;就是一种算法&#xff0c;能够把一系列的数据按照一定的顺序进行排列显示&#xff08;从小到大或从大到小&#xff09;。例如能够将数组[5,4,3,2,1]中的元素按照从小到…

使用数字孪生实现电池管理系统 (BMS) 测试自动化

电池管理系统 (BMS) 监控和控制电动飞机和电动汽车等车辆中的电池。它需要在正常和极端条件下进行严格测试&#xff0c;以证明其质量和完整性。 使用模拟电池进行测试非常有益&#xff0c;因为可以快速、反复地安全地测试各种条件&#xff0c;而不会冒着宝贵硬件的风险。这种硬…

Hash表(C++)

本篇将会开始介绍有关于 unordered_map 和 unordered_set 的底层原理&#xff0c;其中底层实现其实就是我们的 Hash 表&#xff0c;本篇将会讲解两种 Hash 表&#xff0c;其中一种为开放定址法&#xff0c;另一种为 hash 桶&#xff0c;在unordered_map 和 unordered_set 的底层…

6、evil box one

低—>中 目标&#xff1a;获取root权限以及2个flag 主机发现 靶机 192.168.1100.40 或者使用fping -gaq 192.168.100.1/24发现主机使用ping的方式。 端口扫描 发现开放了22和80 可以使用-A参数&#xff0c;-A参数会得到更多的扫描细节 访问80端口就是一个apache的基本的…