go 树形结构转为数组
- 菜单结构体
type MenuItem struct {
ID int `json:"id"`
ParentID int `json:"parent_id"`
Name string `json:"name"`
Children []*MenuItem `json:"children,omitempty"` // 子节点列表
}
- 树形菜单转数组
func TreeToArray(root *MenuItem) []MenuItem {
var result []MenuItem
var traverse func(node *MenuItem)
traverse = func(node *MenuItem) {
if node == nil {
return
}
// 将当前节点添加到结果数组中
result = append(result, *node)
// 递归处理子节点
for _, child := range node.Children {
traverse(child)
}
}
traverse(root)
return result
}
- 示例
var treeMenus = &MenuItem{
ID: 1,
ParentID: 0,
Name: "首页",
Children: []*MenuItem{
{
ID: 2,
ParentID: 1,
Name: "产品",
Children: []*MenuItem{
{ID: 3, ParentID: 2, Name: "电子产品"},
{ID: 4, ParentID: 2, Name: "家居用品"},
},
},
{
ID: 5,
ParentID: 1,
Name: "服务",
Children: []*MenuItem{
{ID: 6, ParentID: 5, Name: "技术支持"},
{ID: 7, ParentID: 5, Name: "客户支持"},
},
},
},
}
func main() {
arrayMenus := TreeToArray(treeMenus)
// 打印转换后的数组
for _, item := range arrayMenus {
fmt.Printf("ID: %d, ParentID: %d, Name: %s\n", item.ID, item.ParentID, item.Name)
}
}