model 

package model

import "time"

func (MenuModel) TableName() string {
    return "menu"
}

type MenuModel struct {
    Id         int       `gorm:"column:id" json:"id"`
    Title      string    `gorm:"column:title" json:"title"`
    Route      string    `gorm:"column:route" json:"route"`
    Sid        int       `gorm:"column:sid" json:"sid"`
    Show       int       `gorm:"column:show" json:"show"`
    Sort       int       `gorm:"column:sort" json:"sort"`
    Icon       string    `gorm:"column:icon" json:"icon"`
    Created_at time.Time `gorm:"column:created_at" json:"created_at"`
    Updated_at time.Time `gorm:"column:updated_at" json:"updated_at"`
}

type MenuTreeModel struct {
    MenuModel
    Children []*MenuTreeModel `json:"children"`
}


service 

type MapTreeType map[int64]*model.MenuTreeModel

func listToTree(items []model.MenuModel) []*model.MenuTreeModel {
    var tree []*model.MenuTreeModel
    mapTree := make(MapTreeType)
    for _, item := range items {
        // 赋值
        var treeItem model.MenuTreeModel
        treeItem.Id = item.Id
        treeItem.Title = item.Title
        treeItem.Route = item.Route
        treeItem.Sid = item.Sid
        treeItem.Show = item.Show
        treeItem.Sort = item.Sort
        treeItem.Icon = item.Icon
        treeItem.Created_at = item.Created_at
        treeItem.Updated_at = item.Updated_at
        // 根节点收集
        if item.Sid == 0 {
            tree = append(tree, &treeItem)
        } else {
            // 子节点收集
            mapTree[int64(item.Sid)].Children = append(mapTree[int64(item.Sid)].Children, &treeItem)
        }
        // 把节点映射到map表
        mapTree[int64(item.Id)] = &treeItem
    }
    return tree
}