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 }