package main
import (
"fmt"
)
// Menu 菜单,对应数据库的结构
type Menu struct {
ID int
ParentID int
Name string
}
// TreeList 菜单,给前端的结构
type TreeList struct {
ID int
ParentID int
Name string
Children []TreeList
}
// GetMenu 获取菜单
func GetMenu(menuList []Menu,pid int) []TreeList {
treeList := []TreeList{}
for _, v := range menuList {
if v.ParentID == pid {
child := GetMenu(menuList,v.ID)
node := TreeList {
ID: v.ID,
Name: v.Name,
ParentID: v.ParentID,
}
node.Children = child
treeList = append(treeList, node)
}
}
return treeList
}
func main() {
//模拟从数据库查询到的数据
myMenu := []Menu{
{ID: 1,ParentID: 0, Name:"用户管理"},
{ID: 2,ParentID: 0, Name:"会员管理"},
{ID: 3,ParentID: 0, Name:"权限管理"},
{ID: 4,ParentID: 2, Name:"会员管理"},
{ID: 5,ParentID: 2, Name:"黑名单"},
{ID: 6,ParentID: 4, Name:"会员列表"},
}
list := GetMenu(myMenu,0)
fmt.Printf("list:%v",list)
//list:[{1 0 用户管理 []} {2 0 会员管理 [{4 2 会员管理 [{6 4 会员列表 []}]} {5 2 黑名单 []}]} {3 0 权限管理 []}]
}