递归调用

func AndLevel(resource []Resource, parentid int64, level int) []Trees {
    //递归调用当全部的循环没有完成的时候是没有进行child的存值操做
    var len = 0
    var x = 0
    //这里是为了计算我存储数据的slice的长度
    for _, v := range resource {
        if v.ParentId == parentid {
            len = len + 1
        }
    }
    //这里根据上面取得的长度定义slice
    var tree []Trees = make([]Trees, len)
    if len != 0 {
        for k, v := range resource {
            //这里的k是不定的,因此须要定义另外的累加值进行累加计数
            //将计数累加放在这里会致使数组越界,由于没有知足条件,循环次数会超过上面定义的slice的长度
            if v.ParentId == parentid {
                k = x
                x = x + 1
                //知足条件赋值
                tree[k].Reskey = v.Reskey
                tree[k].IsFunction = v.IsFunction
                tree[k].Icon = v.Icon
                tree[k].Sort = v.Sort
                tree[k].Level = level
                //下级菜单的个数不定因此这里更改id值和层级 循环再次调用本身
                child := AndLevel(resource, v.ID, level+1)
                //将取出来的值赋值给子项
                tree[k].Children = child
            }
        }
    }
    return tree
}
相关文章
相关标签/搜索