2018-05-14 12:45

Golang 版无限级菜单分类及使用方法

摘要

:none

场景

做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
}

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

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