我是 Flatbuffers 和 GoLang 的新手。我正在尝试实现一个将对象转换为 flatbuffer 并检索相同对象的函数。这是我的代码。 更新代码
func getannouncements(){
annList := SR.GetFromDB().GetAllAnnouncementList()
fmt.Println(annList)
builder := flatbuffers.NewBuilder(1024)
var thisobjlist [12] flatbuffers.UOffsetT
for i,j := range annList{
annTitle := builder.CreateString(j.AnnTitle)
annText := builder.CreateString(j.AnnText)
annDate := builder.CreateString(j.AnnDate)
fb.AnnouncementStart(builder)
fb.AnnouncementAddAnnId(builder,int32(j.AnnID))
fb.AnnouncementAddAnnTitle(builder,annTitle)
fb.AnnouncementAddAnnText(builder, annText)
fb.AnnouncementAddAnnActive(builder,CR.BoolToByte(j.AnnActive))
fb.AnnouncementAddAnnDate(builder,annDate)
thisobj:= fb.AnnouncementEnd(builder)
thisobjlist[i] = thisobj
}
fb.AnnouncementListStartAnnListVector(builder,len(annList))
for _,j:=range thisobjlist{
builder.PlaceUOffsetT(j)
}
finalObj := fb.AnnouncementListEnd(builder)
builder.Finish(finalObj)
buf:= builder.FinishedBytes()
fmt.Println(buf)
/*bufItem := new(bytes.Buffer)
binary.Write(bufItem, binary.LittleEndian, buf)
buf1 := bufItem.Bytes()
buffyRead := bytes.NewReader(buf1)
var buffy []byte
binary.Read(buffyRead, binary.LittleEndian, &buffy)*/
Anncmt:= fb.GetRootAsAnnouncementList(buf,0)
anns := new(fb.Announcement)
if Anncmt.AnnList(anns,1){
thisLists := anns.AnnTitle()
fmt.Println(thisLists)
}
fmt.Println(Anncmt)
}
架构文件
namespace FlatBufs;
table Announcement{
AnnId:int;
AnnTitle:string;
AnnText:string;
AnnDate:string;
AnnActive:bool= false;
}
table AnnouncementList{
AnnName:string;
AnnList:[Announcement];
}
root_type AnnouncementList
buf 对象是一个字节数组。但是,当我生成 AnnGot obj 时,我仍然得到与 buf 几乎相同的字节数组。因此,当我在互联网上阅读有关此主题的各种帖子时,我尝试将该 buf 转换为二进制类型,然后检索 buf 并尝试检索数据(如代码的注释部分所示)。这次对象 buffy 中没有任何数据。我仍然不清楚我在整个代码中犯了什么错误。
请指出我正确的方向。非常感谢您对此的任何帮助。
谢谢,汤姆