Golang 权限树状结构处理
实例使用的是Beego框架
直接上代码: 总共分 3步
第一步:定义 “树” 结构体
// 用来处理数据库数据 type AuthPermission struct { Id int Title string Pid int Level int Status int Route string IsShow int IsDel int CreatedAt time.Time UpdatedAt time.Time } // 用于处理树结构 type AuthPermissionTree struct { Id int Title string Pid int Level int Status int Route string IsShow int IsDel int CreatedAt time.Time UpdatedAt time.Time Child [] *AuthPermissionTree }
第二步:查询数据调用方法
//查询数据 permissionList := [] *models.AuthPermission{} this.o.QueryTable( new(models.AuthPermission).TableName() ).Filter("IsShow",1).All(&permissionList) // 调用生成树状结构数据的方法 permissionListTree, _ := util.NodeDataMerge(permissionList,41) //打印Json //this.Data["json"] = permissionListTree //this.ServeJSON() //return // 赋值给模版 this.Data["navList"] = permissionListTree this.TplName = this.controllerName + "/main.html"
第三步:处理树状结构方法
// 合并权限节点数据 递归返回树状结构 参考:https://blog.csdn.net/qq_15418761/article/details/81217146 func NodeDataMerge(nodeList [] *models.AuthPermission, pid int) (dataList [] *models.AuthPermissionTree, err error) { // 遍历每一个节点 for _, v := range nodeList { // 当前节点的Pid 如果 等于 pid 那么就说明他有子集 if v.Pid == pid { // 通过递归查询子节点 children, _ := NodeDataMerge(nodeList, v.Id) // 定义当前节点数据 并且 合并子节点 parent := models.AuthPermissionTree{Id:v.Id, Title:v.Title, Pid:v.Pid, Level:v.Level, Status:v.Status, Route:v.Route, IsShow:v.IsShow, Child: children} // 将当前节点 合并 到结果集 dataList = append(dataList, &parent) } } return dataList, nil }