golang实现无限级分类
这是一个简单的递归查找无限分类的示例。
这里的ID为正常的商品ID。
PID如果是最大级别的时候为0,如果是其它商品的子分类时为该商品的ID。
// GoodsClassify 商品分类 type GoodsClassify struct { ID uint // 商品ID PID uint // 父ID Label string // 商品名称 } // GoodArr 返回的分类数据 type GoodArr struct { ID uint // 商品ID PID uint // 父ID Label string // 商品名称 Level uint // 深度(层次) Child []GoodArr // 子对象 } func main() { var stuArr []GoodsClassify stuArr = append(stuArr, GoodsClassify{ID: 1, PID: 0, Label: "图书"}) stuArr = append(stuArr, GoodsClassify{ID: 2, PID: 1, Label: "文学"}) stuArr = append(stuArr, GoodsClassify{ID: 3, PID: 1, Label: "历史"}) stuArr = append(stuArr, GoodsClassify{ID: 4, PID: 3, Label: "古代"}) stuArr = append(stuArr, GoodsClassify{ID: 5, PID: 0, Label: "乐器"}) result := getListGoods(stuArr, 0, 0) log.Printf("%+v", result) } // 获得列出商品分类 func getListGoods(stuAll []GoodsClassify, pid uint, lev uint) []GoodArr { var goodArr []GoodArr for _, v := range stuAll { if v.PID == pid { // 这里可以理解为每次都从最原始的数据里面找出相对就的ID进行匹配,直到找不到就返回 child := getListGoods(stuAll, v.ID, lev+1) node := GoodArr{ ID: v.ID, PID: v.PID, Label: v.Label, Level: lev, Child: child, } goodArr = append(goodArr, node) } } return goodArr }