Go 如何写向量

Go 如何写向量,go,flatbuffers,Go,Flatbuffers,我第一次使用Go flatbuffers接口。我觉得说明不多 我想把uint64s的向量写到一个表中。理想情况下,我希望直接将数字存储在向量中,而不知道前面有多少(我是从sql.Rows迭代器中读取的)。我看到为表生成的代码具有以下功能: func DatasetGridAddDates(builder *flatbuffers.Builder, dates flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(2, flatbuffer

我第一次使用Go flatbuffers接口。我觉得说明不多

我想把uint64s的向量写到一个表中。理想情况下,我希望直接将数字存储在向量中,而不知道前面有多少(我是从sql.Rows迭代器中读取的)。我看到为表生成的代码具有以下功能:

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)