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
}