package util import ( "app.yhyue.com/moapp/jyResourcesCenter/rpc/resourcesCenter" "bytes" "encoding/binary" "fmt" ) func MakeTree(Allnode []*resourcesCenter.Organ, node *resourcesCenter.Organ) { //参数为父节点,添加父节点的子节点指针切片 childs, _ := haveChild(Allnode, node) //判断节点是否有子节点并返回 if childs != nil { node.Data = append(node.Data, childs[0:]...) //添加子节点 for _, v := range childs { //查询子节点的子节点,并添加到子节点 _, has := haveChild(Allnode, v) if has { MakeTree(Allnode, v) //递归添加节点 } } } } //判断是否有子节点 func haveChild(Allnode []*resourcesCenter.Organ, node *resourcesCenter.Organ) (childs []*resourcesCenter.Organ, yes bool) { for _, v := range Allnode { if v.ParentId == node.Id { childs = append(childs, v) } } if childs != nil { yes = true } return } //字节数(大端)组转成int(有符号) func bytesToIntS(b []byte) (int, error) { if len(b) == 3 { b = append([]byte{0}, b...) } bytesBuffer := bytes.NewBuffer(b) switch len(b) { case 1: var tmp int8 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) return int(tmp), err case 2: var tmp int16 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) return int(tmp), err case 4: var tmp int32 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp) return int(tmp), err default: return 0, fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!") } }