go语言菜单树结构

2023-11-08

GO语言菜单树结构实现,Menu是数据库表映射。MenuTree是树结构菜单,目前只考虑2级菜单。后面附源码,亲测可用

package models

import (
       "github.com/astaxie/beego/orm"
       "time"
)

type Menu struct {
       Base
       MenuName string
       Pid      int64
       MenuType int8
       MenuUrl  string
}

type MenuTree struct {
       Id       int64
       MenuName string
       Pid      int64
       MenuType int8
       MenuUrl  string
       Children []*MenuTree
}

func SaveMenu(m *Menu) (int64, error) {
       if m.CreateUser == "" {
              m.CreateUser = "sys"
       }
       if m.UpdateUser == "" {
              m.UpdateUser = "sys"
       }
       m.CreateTime = time.Now()
       m.UpdateTime = time.Now()

       return orm.NewOrm().Insert(m)
}

func GetMenuList() (dataList []interface{}, err error) {
       var list []Menu
       if _, err := orm.NewOrm().QueryTable(new(Menu)).All(&list); err == nil {
              for _, v := range list {
                     dataList = append(dataList, v)
              }
              return dataList, nil
       }
       return nil, err
}

func GetMenuTree() (dataList []interface{}, err error) {
       var parentList []*Menu
       //获取父节点

       if _, err := orm.NewOrm().QueryTable(new(Menu)).Filter("pid", nil).All(&parentList); err != nil {
              return nil, err
       }
       for _, v := range parentList {
              parent := MenuTree{v.Id, v.MenuName, v.Pid, v.MenuType, v.MenuUrl, []*MenuTree{}}
              var childrenList []*Menu
              if _, err := orm.NewOrm().QueryTable(new(Menu)).Filter("pid", v.Id).All(&childrenList); err != nil {
                     return nil, err
              }
              for _, c := range childrenList {
                     child := MenuTree{c.Id, c.MenuName, c.Pid, c.MenuType, c.MenuUrl, []*MenuTree{}}
                     parent.Children = append(parent.Children, &child)
              }
              dataList = append(dataList, parent)
       }
       return dataList, nil
}





 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言菜单树结构 的相关文章

  • GO Websocket 向所有客户端发送消息

    这段代码一切正常 为了更好的阅读而缩短了它 When Client1向服务器发送请求 服务器立即响应他 但是 其他客户端看不到响应消息 所以我想更进一步 当客户端向服务器发送请求时 服务器会响应所有客户端 以便所有客户端都可以看到该消息 我
  • 如何处理未知变量或如何处理多个数据库

    我正在开发一个带有多个数据库的 Go RESTful API 应用程序 启动服务器时 用户提供他们想要使用的数据库 在应用程序中 我有三大功能其中一个处理连接 selectedDb Get selectedDb Add selectedDb
  • 在 Go 中设置引用

    如何通过引用传递接口并让方法为我填充它 像这样的东西 var i CustomInterface Get title ref i i SomeOperationWithoutTypeAssertion i is nil here my pr
  • 如何组合杜松子酒中的路线组? [复制]

    这个问题在这里已经有答案了 我创建了两个不同的组gin具体路由 user and todo在两个不同的包中 我想将它们合并到一个文件中 这是我的userroutes go file package userrouter import git
  • Go(lang): 如何使用 PPROF 堆分析来查找内存泄漏?

    我正在尝试使用 pprof 来验证内存泄漏 能否解释一下如何读取您在以下位置找到的堆配置文件 http localhost 6060 debug pprof heap debug 1 另外 通过键入web启动后命令go tool pprof
  • Golang:我可以投射到 chan 接口吗{}

    我正在尝试为订阅编写一个通用包装器 例如 type Subscriber interface Subscribe addr string chan interface 假设有一个我想使用的库 其中有一个 subscribe 方法 但它使用c
  • 如何列出已安装的 go 软件包

    据我所知go distribution带有某种package manager After go 1 4 1我已经运行的安装go help为了找到任何能够列出本地安装的子命令go packages 但不幸的是没有 那么该怎么做呢 goinst
  • Go 中带有 TTL 选项的映射

    我需要构建这样的数据结构 map string SomeType 但它必须将值存储大约 10 分钟 然后从内存中清除 第二个条件是记录数量 它必须是巨大的 该数据结构必须至少添加每秒 2 5K 条记录 那么 Go 中最正确的实现方法是什么
  • 提取给定节点的所有父节点

    我正在尝试使用以下命令提取每个给定 GO Id 节点 的所有父级EBI RDF sparql 端点 https www ebi ac uk rdf services sparql 我是根据this https stackoverflow c
  • c.JSON gin.H{()} 输出空对象

    我刚刚开始学习 GO lang 结合 Gin 框架 我决定编写一些简单的 api 来获取有关酒精饮料的数据 我当前的问题是 api get 方法http localhost 8080 alcohol drinks 返回空数据对象 My co
  • 使用反射从泛型结构获取类型参数

    想象一下我有以下结构 type MyGeneric T string int struct 我想在创建新的 MyGeneric 时检查用于实例化该结构的泛型是字符串还是 int myGenericString MyGeneric strin
  • Golang导入包错误

    go 5 2 在以下任一位置找不到包 github com googollee go socket io usr local go src github com googollee go socket io 来自 GOROOT Users
  • 为什么我无法导入“内置”pkg?

    cat test go package main import builtin func main return go run test go can t find import builtin 我只是好奇 因为该文件存在并且已正确打包 但
  • 将 Base64 字符串转换为 JPG

    我正在得到图像为 base64 字符串 dataurl 下面是我的函数 它将dataurl进入图像 现在 如果图像是 png 则 png 库将创建图像 而 jpg 库将引发错误 反之亦然 问题是当我上传 png 时效果很好 但是当我上传 j
  • 切片文字中的求值顺序

    我最近浏览了Go的 语言规范 https golang org ref spec Order of evaluation https golang org ref spec Order of evaluation但发现评估顺序与本文档中解释
  • 将接口转换为结构体

    type SipField interface Info id name defaultValue string length int type Field string func f Field Get string return str
  • 从恐慌中恢复的程序未按预期退出

    根据我的理解 当恐慌恢复时 我期望程序退出并表现出正常行为 但事实并非如此 我期望最后一行打印 程序结束 是正确的吗 如果出现运行时错误 它不会被打印 是吗 package main import fmt func main defer f
  • Go1编译器如何工作?

    我在一个学校项目中接触 Go 大约一个月了 我注意到 src pkg go 文件夹中的 go ast go token go parser 等包 但是 gc 编译器基于位于 src cmd gc 中的 C 文件 我的问题是关于 Go1 中用
  • 按顺序范围循环映射

    我正在寻找一种确定的方法来范围Go map为了 Go 规范 https golang org ref spec For statements陈述如下 映射的迭代顺序未指定 并且不保证从一次迭代到下一次迭代的顺序相同 如果在迭代过程中删除尚未
  • 从头开始使用映像部署无法启动

    我正在使用以下内容构建图像Dockerfile FROM golang 1 19 2 bullseye as builder COPY src src WORKDIR src RUN CGO ENABLED 1 go build race

随机推荐