귀하의 문제는 일반적인 재귀 루프입니다.
package main
import "fmt"
type Org struct {
OrgID string
OrgName string
parentID string
}
func printTree(tbl []Org, parent string, depth int) {
for _, r := range tbl {
if r.parentID == parent {
for i := 0; i < depth; i++ {
fmt.Print("--")
}
fmt.Print(r.OrgName, "\n\n")
printTree(tbl, r.OrgID, depth+1)
}
}
}
func main() {
data := []Org{
{"A001", "Dept", "0 -----th top"},
{"A002", "subDept1", "A001"},
{"A003", "sub_subDept", "A002"},
{"A006", "gran_subDept", "A003"},
{"A004", "subDept2", "A001"},
}
printTree(data, "0 -----th top", 0)
}
결과 :
Dept
--subDept1
----sub_subDept
------gran_subDept
--subDept2
놀이터 :http://play.golang.org/p/27CQAhI8gf
는 부모가 자신의 자손 인 경우이 재귀 기능을 넣다 거기 루프에 갇혀 얻을 수 있음에 유의 어린이.
더 구체적으로 테이블의 종류; MySQL의 테이블? [] 조직 슬라이스? mongoDB 컬렉션? 그리고 나무에 어떤 유형을 넣으시겠습니까? – ANisus
테이블은 mysql의 슬라이스입니다. – user3373877