写个go 无限极分类demo
时间: 2023-06-05 16:07:37 浏览: 156
好的,我可以为您提供一个基于 Golang 的无限级分类 Demo。首先,您需要定义 Category 结构体,如下所示:
```go
type Category struct {
ID uint `json:"id"`
Name string `json:"name"`
ParentID uint `json:"parent_id"`
Subcategories []Category `json:"subcategories"`
}
```
然后,您需要定义一个函数来创建无限极分类。这可以通过递归实现。如下所示:
```go
func createCategoryTree(categories []Category) []Category {
tree := []Category{}
for _, category := range categories {
if category.ParentID == 0 {
// this is a top-level category
category.Subcategories = getSubcategories(category.ID, categories)
tree = append(tree, category)
}
}
return tree
}
func getSubcategories(id uint, categories []Category) []Category {
subcategories := []Category{}
for _, category := range categories {
if category.ParentID == id {
// this is a subcategory
category.Subcategories = getSubcategories(category.ID, categories)
subcategories = append(subcategories, category)
}
}
return subcategories
}
```
最后,您可以在 main() 函数中使用这些函数创建分类并输出结果。示例代码如下:
```go
func main() {
categories := []Category{
{
ID: 1,
Name: "Category 1",
ParentID: 0,
},
{
ID: 2,
Name: "Subcategory 1.1",
ParentID: 1,
},
{
ID: 3,
Name: "Subcategory 1.2",
ParentID: 1,
},
{
ID: 4,
Name: "Category 2",
ParentID: 0,
},
{
ID: 5,
Name: "Subcategory 2.1",
ParentID: 4,
},
{
ID: 6,
Name: "Subcategory 2.2",
ParentID: 4,
},
}
tree := createCategoryTree(categories)
jsonResult, _ := json.Marshal(tree)
fmt.Println(string(jsonResult))
}
```
输出结果如下:
```json
[
{
"id": 1,
"name": "Category 1",
"parent_id": 0,
"subcategories": [
{
"id": 2,
"name": "Subcategory 1.1",
"parent_id": 1,
"subcategories": []
},
{
"id": 3,
"name": "Subcategory 1.2",
"parent_id": 1,
"subcategories": []
}
]
},
{
"id": 4,
"name": "Category 2",
"parent_id": 0,
"subcategories": [
{
"id": 5,
"name": "Subcategory 2.1",
"parent_id": 4,
"subcategories": []
},
{
"id": 6,
"name": "Subcategory 2.2",
"parent_id": 4,
"subcategories": []
}
]
}
]
```