Golang 版无限级菜单分类及使用方法
时间:2019-06-13 03:05:20 +0800 CST 浏览:1647

场景

做cms时需要动态添加无限极菜单

代码

package main
import (
“encoding/json”
“fmt”
)
type A…

场景

做cms时需要动态添加无限极菜单

代码

package main
import (
 "encoding/json"
 "fmt"
)
type ArticleClass struct {
 Id   int             `json:"id"`
 PID  int             `json:"pid"`
 Name string          `json:"name"`
 List []*ArticleClass `json:"list,omitempty"`
}
func main() {
 test := `[{"id":1,"pid":0,"name":"a"},{"id":2,"pid":1,"name":"b"},{"id":3,"pid":1,"name":"c"}]`
 var list []*ArticleClass // 假设已经赋值进去,从 数据库取出的数据
 if err := json.Unmarshal([]byte(test), &list); err != nil {
 return
 }
 data := buildData(list)
 result := makeTreeCore(0, data)
 temp, _ := json.Marshal(result)
 fmt.Println(string(temp))
}
func buildData(list []*ArticleClass) map[int]map[int]*ArticleClass {
 var data map[int]map[int]*ArticleClass = make(map[int]map[int]*ArticleClass)
 for _, v := range list {
 id := v.Id
 fid := v.PID
 if _, ok := data[fid]; !ok {
 data[fid] = make(map[int]*ArticleClass)
 }
 data[fid][id] = v
 }
 return data
}
func makeTreeCore(index int, data map[int]map[int]*ArticleClass) []*ArticleClass {
 tmp := make([]*ArticleClass, 0)
 for id, item := range data[index] {
 if data[id] != nil {
 item.List = makeTreeCore(id, data)
 }
 tmp = append(tmp, item)
 }
 return tmp
}


如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧