go 循环处理无限极数据

news/2025/1/30 11:46:14/

 数据表结构:

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.ppmy.cn/news/1567878.html

相关文章

Layui 列表根据不同数据展示不同内容,并展示对应颜色

Layui 列表根据不同数据展示不同内容,并展示对应颜色 let cols [[{title: 模板编码, field: templateCode, align: center},{title: 消息内容, field: messageContent, align: center},{title: 消息状态, field: messageStatus, align: center, templet: function …

【starrocks学习】之catalog

目录 一、介绍 二、Catalog的分类 三、使用方法 四、简单示例 一、介绍 ‌StarRocks的Catalog功能‌是一种数据目录管理工具,用于同时管理和查询内部和外部数据。StarRocks从2.3版本开始支持Catalog功能,允许用户在一个系统中方便地访问和查询存储在…

【云安全】云原生-K8S-搭建/安装/部署

一、准备3台虚拟机 务必保证3台是同样的操作系统! 1、我这里原有1台centos7,为了节省资源和效率,打算通过“创建链接克隆”2台出来 2、克隆之前,先看一下是否存在k8s相关组件,或者docker相关组件 3、卸载原有的docker …

PostgreSQL 约束

PostgreSQL 约束 在数据库设计中,约束(Constraint)是一种规则,用于确保数据库中的数据满足特定的条件。PostgreSQL 作为一款功能强大的开源关系型数据库管理系统,提供了多种约束类型,以帮助开发者维护数据的一致性和准确性。本文将详细介绍 PostgreSQL 中常见的约束类型…

OpenAI掀桌子!免费版ChatGPT,提供o3-mini模型!

逆天免费用 今天凌晨,OpenAI联合创始人兼首席执行官Sam Altman宣布了一个大消息——免费版ChatGPT,将提供o3-mini模型! 网页们纷纷不淡定了 看来OpenAI,这o3-mini还没正式上线呢,就免费开放使用了。 不过还是要感谢…

ML基础-Jupyter notebook中的魔法命令

在 Jupyter Notebook 或 IPython 环境中,“魔法命令”(Magic Commands)是一些以百分号(%)或惊叹号(!)开头的特殊命令,用于执行一些与代码运行环境相关的操作,而不仅仅是执行普通的 P…

2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ 《石头台阶的“记忆”:如何用数学揭开历史的足迹》 目录 《石头台阶的“记忆”:如何用数学揭开历史的足迹》 ✨摘要✨ ✨引言✨ 1. 引言的结构 2. 撰写步骤 (1)研究背景 &#…

Java面试题2025-Spring

Spring面试专题 1.Spring应该很熟悉吧?来介绍下你的Spring的理解 1.1 Spring的发展历程 先介绍Spring是怎么来的,发展中有哪些核心的节点,当前的最新版本是什么等 通过上图可以比较清晰的看到Spring的各个时间版本对应的时间节点了。也就是…