Golang 无限极菜单分类

realguan · · 1618 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// 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)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:realguan

查看原文:Golang 无限极菜单分类

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1618 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传