Go 如何写向量
我第一次使用Go flatbuffers接口。我觉得说明不多 我想把uint64s的向量写到一个表中。理想情况下,我希望直接将数字存储在向量中,而不知道前面有多少(我是从sql.Rows迭代器中读取的)。我看到为表生成的代码具有以下功能:Go 如何写向量,go,flatbuffers,Go,Flatbuffers,我第一次使用Go flatbuffers接口。我觉得说明不多 我想把uint64s的向量写到一个表中。理想情况下,我希望直接将数字存储在向量中,而不知道前面有多少(我是从sql.Rows迭代器中读取的)。我看到为表生成的代码具有以下功能: func DatasetGridAddDates(builder *flatbuffers.Builder, dates flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(2, flatbuffer
func DatasetGridAddDates(builder *flatbuffers.Builder, dates flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(2, flatbuffers.UOffsetT(dates), 0)
}
func DatasetGridStartDatesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(8, numElems, 8)
}
我是否可以先使用(?)编写向量,然后使用DatasetGridAddDates
将生成的向量记录在包含“DatasetGrid”的表中?(注意:在阅读您的问题之前,我没有听说过FlatBuffers)
如果您确实提前知道长度,则按照以下说明存储向量:
现在,如果您没有len(myDates)
,该怎么办?在一个玩具示例中,如果我将StartDatesVector(builder,len(myDates))
替换为StartDatesVector(builder,0)
,我会得到完全相同的输出。从中可以看出,numElems
对于对齐和增加缓冲区可能是必要的。我想在处理uint64时,对齐可能是没有意义的,而且增长似乎也会自动发生在prependunit64
上
因此,请尝试在不使用numElems的情况下执行此操作:
q55310927.DatasetGridStartDatesVector(builder, 0)
var n int
for rows.Next() { // use ORDER BY to make them go in reverse order
var date uint64
if err := rows.Scan(&date); err != nil {
// ...
}
builder.PrependUint64(date)
n++
}
dates := builder.EndVector(n)
看看它对您的数据是否有效。谢谢。。暂时标记为答案,但关于不提前知道长度的更权威信息将是有用的。
q55310927.DatasetGridStartDatesVector(builder, 0)
var n int
for rows.Next() { // use ORDER BY to make them go in reverse order
var date uint64
if err := rows.Scan(&date); err != nil {
// ...
}
builder.PrependUint64(date)
n++
}
dates := builder.EndVector(n)