当前位置: 首页 > news >正文

go 循环处理无限极数据

 数据表结构:

CREATE TABLE `permission` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限ID',`permission_name` varchar(255) DEFAULT NULL COMMENT '权限名称',`permission_url` varchar(255) DEFAULT NULL COMMENT '权限路由',`status` tinyint(1) DEFAULT NULL COMMENT '权限状态',`pid` int(11) DEFAULT NULL COMMENT '父级ID',`created_at` datetime(3) DEFAULT NULL,`updated_at` datetime(3) DEFAULT NULL,`deleted_at` datetime(3) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idx_permission_deleted_at` (`deleted_at`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4;

 代码:


//定义结构体存储数据
type Permission_c struct {Id             intPid            intStatus         intPermissionName stringPermissionUrl  stringChildren       []*Permission_c `gorm:"foreignKey:Pid;references:Id"`
}// 权限列表
func (con Permission_c) PermissionList(c *gin.Context) {var permissions []*Permission_cif err := database.DB.Table("permission").Find(&permissions).Error; err != nil {c.JSON(500, gin.H{"error": err,})return}// 创建一个映射,方便快速查找每个权限节点permissionMap := make(map[int]*Permission_c)for _, p := range permissions {permissionMap[p.Id] = p}//var pdata []*Permission_cfor _, p := range permissions {if p.Pid == 0 {pdata = append(pdata, p)} else {// 找到父节点parent, ok := permissionMap[p.Pid]if ok {if parent.Children == nil {parent.Children = make([]*Permission_c, 0)}parent.Children = append(parent.Children, p)}}}c.JSON(200, gin.H{"permission": pdata,})
}

处理后的数据:

{"permission": [{"Id": 1,"Pid": 0,"Status": 0,"PermissionName": "用户管理","PermissionUrl": "#","Children": [{"Id": 2,"Pid": 1,"Status": 0,"PermissionName": "账号管理","PermissionUrl": "/backendUsers/permission/list","Children": [{"Id": 5,"Pid": 2,"Status": 0,"PermissionName": "账号添加","PermissionUrl": "/backendUsers/account/add","Children": null},{"Id": 6,"Pid": 2,"Status": 0,"PermissionName": "账号删除","PermissionUrl": "/backendUsers/account/del","Children": null},{"Id": 8,"Pid": 2,"Status": 0,"PermissionName": "账号修改","PermissionUrl": "/backendUsers/account/upd","Children": null}]},{"Id": 3,"Pid": 1,"Status": 0,"PermissionName": "角色管理","PermissionUrl": "/backendUsers/role/list","Children": [{"Id": 9,"Pid": 3,"Status": 0,"PermissionName": "角色添加","PermissionUrl": "/backendUsers/role/add","Children": null},{"Id": 10,"Pid": 3,"Status": 0,"PermissionName": "角色删除","PermissionUrl": "/backendUsers/role/del","Children": null},{"Id": 12,"Pid": 3,"Status": 0,"PermissionName": "角色修改","PermissionUrl": "/backendUsers/role/upd","Children": null}]},{"Id": 4,"Pid": 1,"Status": 0,"PermissionName": "权限管理","PermissionUrl": "/backendUsers/permission/list","Children": [{"Id": 13,"Pid": 4,"Status": 0,"PermissionName": "权限添加","PermissionUrl": "/backendUsers/permission/add","Children": null}]}]},{"Id": 14,"Pid": 0,"Status": 0,"PermissionName": "商品管理","PermissionUrl": "#","Children": null}]
}

http://www.lryc.cn/news/528276.html

相关文章:

  • C# Dynamic关键字
  • ReactNative react-devtools 夜神模拟器连调
  • 【教学类-89-02】20250128新年篇02——姓名藏头对联(星火讯飞+Python,五言对联,有横批)
  • 装机爱好者的纯净工具箱
  • 【新春不断更】数据结构与算法之美:二叉树
  • 网站结构优化:加速搜索引擎收录的关键
  • Effective Objective-C 2.0 读书笔记—— objc_msgSend
  • [MySQL]事务的隔离级别原理与底层实现
  • 项目升级Sass版本或升级Element Plus版本遇到的问题
  • C++中,存储两个相同类型的数据,数据结构
  • python实战(十五)——中文手写体数字图像CNN分类
  • [论文阅读] (37)CCS21 DeepAID:基于深度学习的异常检测(解释)
  • Linux - 进程间通信(2)
  • Kafka 消费端反复 Rebalance: `Attempt to heartbeat failed since group is rebalancing`
  • SpringBoot+Electron教务管理系统 附带详细运行指导视频
  • 操作系统(Linux Kernel 0.11Linux Kernel 0.12)解读整理——内核初始化(main init)之控制台工作
  • Autogen_core: Message and Communication
  • ComfyUI工作流教程、软件使用、开发指导、模型下载
  • 零基础Vue学习1——Vue学习前环境准备
  • 定西市建筑房屋轮廓数据shp格式gis无偏移坐标(字段有高度和楼层)内容测评
  • 汉语向编程指南
  • Writing an Efficient Vulkan Renderer
  • AI常见的算法
  • LibreChat
  • Spring Boot 日志:项目的“行车记录仪”
  • Spring Boot 实现文件上传和下载
  • 慕课:若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战,启动文档
  • React第二十七章(Suspense)
  • 虚幻基础08:组件接口
  • iPhone SE(第三代) 设备详情图