首页 > 其他分享 >Golang递归实现菜单分类

Golang递归实现菜单分类

时间:2024-06-07 17:11:03浏览次数:23  
标签:菜单 Name 递归 int Menu Golang ParentID TreeList ID

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)
    //list:[{1 0 用户管理 []} {2 0 会员管理 [{4 2 会员管理 [{6 4 会员列表 []}]} {5 2 黑名单 []}]} {3 0 权限管理 []}]
}

标签:菜单,Name,递归,int,Menu,Golang,ParentID,TreeList,ID
From: https://www.cnblogs.com/qcy-blog/p/18237541

相关文章

  • 迭代与递归--你被递归搞晕过吗?
    前言算法中会经常遇见重复执行某个任务,那么如何实现呢,本文将详细介绍两种实现方式,迭代与递归。本文基于Java语言。一、迭代迭代(iteration),就是说程序会在一定条件下重复执行某段代码,直到条件不再满足。在Java语言中,可以理解为就是循环遍历,Java中有多种遍历方式,如for......
  • PyQT5之菜单栏和工具栏
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2classButtonPanel(QtWidgets.QWidget):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)select_btn=QtWidgets.QPushButton("图......
  • feapder框架爬取ks评论_递归的方式
    importrandomimportreimporttimefromfeapder.db.mysqldbimportMysqlDBimportfeapderdefis_number(string):pattern=re.compile(r'^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$')returnbool(pattern.match(string))classAirSpiderDemo(feapder.Ai......
  • 8-4 【Python0036】中文级联菜单
    importtkinterastkfromtkinterimportttkfrompypinyinimportlazy_pinyin#省份、城市、地区数据data={"北京":{"北京市":["东城区","西城区","朝阳区"],},"上海":{"上海市......
  • Golang学习笔记(1):包管理
    Golang学习笔记(1):包管理本人学习Golang主要是为了做MIT6.824的lab,然而一上来就被Golang神奇的import搞混了,因此写一篇博客记录学习Golang的包管理的过程。packagemainimport"fmt"funcmain(){fmt.Println("hello,world")}如果有编程基础肯定会觉得这段代码很好理......
  • golang select 的 case 执行顺序
    问题:golangselect结构,假如底下有三个case,分别从chan1,chan2,chan3读取内容,chan1,chan2,chan3都是非阻塞的,那么是会先进入第一个case,其它case还会再进入吗?在Go语言中,select语句用于监控多个通道的操作,并在其中一个操作准备好时执行相应的case。如果多个case同......
  • 使用jQuery实现鼠标移入展开导航的二级菜单栏
    1、首先写出html结构(举个例子)<divclass="nav"><ul><li><ahref="#">全国导航</a><ulclass="nav_meun"><li><ahref=&qu......
  • golang接口请求结构体验证器Validator实现
    一、前提:认识reflect.TypeOf及reflect.ValueOfTypeOf:动态的获取从函数接口中传进去的变量的类型,如果为空则返回值为nil(获取类型对象)可以从该方法获取的对象中拿到字段的所属类型,字段名,以及该字段是否是匿名字段等信息。还可以获取到与该字段进行绑定的tag。ValueO......
  • 前端菜鸡流水账日记 -- checkbox二级菜单滚动条设置
    下午好哇,今天二更咯,这次想说的是一个ElemenuUI中的一个组件--checkbox多选框,管网的地址是https://element.eleme.cn/#/zh-CN/component/installation,关于这个的具体的写法,感兴趣的小伙伴可以去管网看看,很快就能找到的我今天要记录的是关于他的二级菜单当盒子的内容过多时,超......
  • 如何用Golang写msf插件模块
    最近有空在看msf,发现msf里面有模块的源码是golang的,去翻了翻wiki,wiki上面的编写日期是2018.12.13,搜了下国内,好像没有这方面的文章,那就自己跟着做做记个笔记首先第一步自然是安装go,官方wiki上测试是在1.11.2通过,建议使用version>=1.11.2的go,怎么安装go我不再赘述注意事项......