递归调用
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 }