你好,我这里有一个商品类别列表CategoryDo,需要根据parentid生成树结构CategoryResp,麻烦帮我用go语言写出来
时间: 2024-04-29 22:26:01 浏览: 12
你好,这是一个可以生成树形结构的Go代码示例:
```go
type CategoryDo struct {
Id int64
ParentId int64
Name string
}
type CategoryResp struct {
Id int64
Name string
Children []*CategoryResp
}
func buildTree(nodes []*CategoryDo, parentId int64) []*CategoryResp {
var res []*CategoryResp
for _, node := range nodes {
if node.ParentId == parentId {
child := &CategoryResp{
Id: node.Id,
Name: node.Name,
}
child.Children = buildTree(nodes, child.Id)
res = append(res, child)
}
}
return res
}
func main() {
nodes := []*CategoryDo{
{1, 0, "Category 1"},
{2, 1, "Category 1.1"},
{3, 1, "Category 1.2"},
{4, 2, "Category 1.1.1"},
{5, 2, "Category 1.1.2"},
{6, 3, "Category 1.2.1"},
}
tree := buildTree(nodes, 0)
fmt.Printf("%v\n", tree)
}
```
代码中的 `buildTree` 函数会递归构建树形结构。首先,我们根据指定的 `parentId` 遍历所有的节点,并找到与其对应的节点,然后创建一个 `CategoryResp` 对象,并递归调用 `buildTree` 函数,将返回的子节点列表设置为该对象的 `Children` 属性。最后将对象添加到 `res` 列表中,并返回结果即可。
注意,代码中的 `CategoryDo` 和 `CategoryResp` 对象分别表示原始数据和树形结构数据,可以按照实际业务需求来修改。