Golang实现:树形结构返回所有菜单列表

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

package

import (
      "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql"
)

const (
    DSN= "root:root@tcp(127.0.0.1:3306)/mall?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai"
    DriverName  = "mysql"
)

// 这是 ums_menu表 的实体类
type UmsMenu struct {
    Id         int64     `json:"id,omitempty"`
    ParentId   int64     `json:"parent_id"`   // 父级ID
    Title      string    `json:"title"`       // 菜单名称
    Level      int32     `json:"level"`       // 菜单级数
    Sort       int32     `json:"sort"`        // 菜单排序
    Name       string    `json:"name"`        // 前端名称
    Icon       string    `json:"icon"`        // 前端图标
    Hidden     int32     `json:"hidden"`      // 前端隐藏
    CreateTime time.Time `json:"create_time"` // 创建时间
}

// 子级菜单
type UmsMenuNode struct {
    Id         int64     `json:"id,omitempty"`
    ParentId   int64     `json:"parent_id"`   // 父级ID
    Title      string    `json:"title"`       // 菜单名称
    Level      int32     `json:"level"`       // 菜单级数
    Sort       int32     `json:"sort"`        // 菜单排序
    Name       string    `json:"name"`        // 前端名称
    Icon       string    `json:"icon"`        // 前端图标
    Hidden     int32     `json:"hidden"`      // 前端隐藏
    CreateTime time.Time `json:"create_time"` // 创建时间
    Children []*UmsMenuNode `json:"children"`
}

//菜单列表
func (m *UmsMenu)MenuList()([]*UmsMenuNode,error){
    return m.GetMenu(0)
}

//递归获取树形菜单
func (m *UmsMenu)GetMenu(parentId int64)([]*UmsMenuNode,error){
    o := orm.NewOrm()
    var list []UmsMenu
    //menu, err := UmsMenuDao.SelectByParentId(parentId)
    //获取parentId的所有子菜单
    o.QueryTable("ums_menu").Filter("parent_id",parentId).OrderBy("sort").All(&list)

    tree := make([]*UmsMenuNode,0)
    for _,item := range list {
        child ,_:= item.GetMenu(item.Id) //获取parentId每一个子菜单的子菜单
        node := &UmsMenuNode{
            Id: item.Id,
            ParentId: item.ParentId,
            Title: item.Title,
            Level: item.Level,
            Sort: item.Sort,
            Name: item.Name,
            Icon: item.Icon,
            Hidden: item.Hidden,
            CreateTime:item.CreateTime,
        }
        node.Children = child
        tree = append(tree,node)
    }
    return tree,nil
}

func main(){
            orm.RegisterDataBase("default",DriverName,DSN)
            // 注册模型
            orm.RegisterModel(new(UmsMenu))

            var l UmsMenu
           l.MenuList()
}

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

本文来自:简书

感谢作者:Kotlin_2019

查看原文:Golang实现:树形结构返回所有菜单列表

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

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