func GetItemInfo(obj datatype.Entityer, syncchild bool) (*datatype.EntityInfo, error) { item := &datatype.EntityInfo{} buffer := new(bytes.Buffer) enc := gob.NewEncoder(buffer) err := enc.Encode(obj) if err != nil { log.LogError("encode ", obj.ObjTypeName(), "error,", err) return nil, err } item.Type = obj.ObjTypeName() item.Caps = obj.GetCapacity() item.DbId = obj.GetDbId() item.ObjId = obj.GetObjId() item.Index = obj.GetIndex() item.Data = buffer.Bytes() if syncchild { ls := obj.GetChilds() if len(ls) > 0 { item.Childs = make([]*datatype.EntityInfo, 0, len(ls)) } for _, c := range ls { if c != nil { child, err := GetItemInfo(c, syncchild) if err != nil { return nil, err } item.Childs = append(item.Childs, child) } } } return item, nil }