个人从java转到PHP,然后最近在接触golang,发现好多在PHP中方便的递归操作,在golang中比较费时,可能是个人接触的太少经验太少,对golang中数据类型使用比较生疏,所以给新手分享一下个人写的一个实际项目的递归操作。
/**
获取书本分类列表
*/
func GetProfessionalClass() (bool, string, interface{}) {
gData := modelsProfessional.GetProfessionalClassDataListByCondition(map[string]interface{}{})
if len(gData) == 0 {
return false, "数据不存在,无法获取", nil
}
newData := computerClass(0, gData)
return true, "查询成功", newData
}
/**
递归查询处理数据
*/
func computerClass(parentId int, gData []modelsProfessional.FoxProfessionalClass) []ClassArr {
var classArr []ClassArr
for i := 0; i < len(gData); i++ {
if gData[i].ParentId == parentId {
childrenData := computerClass(gData[i].Id, gData)
if len(childrenData) > 0 {
for j := 0; j < len(childrenData); j++ {
tData := ClassArr{
Id: childrenData[j].Id,
Title: gData[i].Title + "|" + childrenData[j].Title,
Knowledge: childrenData[j].Knowledge,
}
classArr = append(classArr, tData)
}
} else {
pData := modelsProfessional.GetProfessionalKnowledgeListByClassId(gData[i].Id)
if len(pData) > 0 {
tData := ClassArr{
Id: gData[i].Id,
Title: gData[i].Title,
Knowledge: pData,
}
classArr = append(classArr, tData)
}
}
}
}
return classArr
}