go語言菜單樹結構

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
}





 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章