Golang 无限极菜单分类
package main
import "fmt"
// Menu 菜单
type Menu struct {
ID int
ParentID int
Name string
Children []Menu
}
// TreeList 菜单
type TreeList struct {
ID int
ParentID int
Name string
Children []TreeList
}
// FormMenu 格式化菜单
func FormMenu(list []Menu, pid int) (formMenu []Menu) {
for _, val := range list {
if val.ParentID == pid {
if pid == 0 {
// 顶层
formMenu = append(formMenu, val)
} else {
var children []Menu
child := val
children = append(children, child)
}
}
}
return
}
// 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)
}