美文网首页
Golang 无限极菜单分类

Golang 无限极菜单分类

作者: realguan | 来源:发表于2020-08-17 21:05 被阅读0次
    // 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)
    }
    

    相关文章

      网友评论

          本文标题:Golang 无限极菜单分类

          本文链接:https://www.haomeiwen.com/subject/jnkcjktx.html