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
}