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


本文摘自网络,作者,侵删。

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基础及语法(二)

Golang-2(变量)

Golang如何处理输入?

2021-03-18 Golang 以太坊大额转账转换问题

Golang判断interface为nil

Golang有什么用途?

关于Golang读写锁

Golang的zap日志库的简单封装

Golang阿里云api请求鉴权

Golang依赖注入工具wire指南

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...