go - 使用 cap'n'proto 读取数据时获取 EOF
问题描述
脚步:
func viewAll(db *badger.DB) {
txn := db.NewTransaction(false)
defer txn.Discard()
iterOpts := badger.IteratorOptions{false, 0, false, true}
itr := txn.NewIterator(iterOpts)
defer itr.Close()
b := state.NewBucket(state.BucketRecords)
multiBuffer := capn.NewSingleSegmentMultiBuffer()
for itr.Seek(b.NewKey(nil).Bytes()); itr.Valid(); itr.Next() {
value, err := itr.Item().Value()
if err != nil {
log.Fatalln(err)
}
read, err := capn.ReadFromMemoryZeroCopyNoAlloc(value, multiBuffer)
if err != nil {
log.Fatalln(err) // EOF error
} else if read != int64(len(value)) {
panic(fmt.Sprintf("wrong read: %d != %d", read, len(value)))
}
vv := proto.ReadRootRecord(multiBuffer.Segments[0])
out, err := vv.MarshalCapLit()
if err != nil {
log.Fatalln(err)
}
err = ioutil.WriteFile("cmd/db/content.out", out, 0777|os.ModeAppend)
if err != nil {
log.Fatalln("toFile", err)
}
}
}
结果:
EOF
结果content.out仅包含第一个(可能是第一个)数据块。我究竟做错了什么?谢谢!
没有可用的详细信息。
解决方案
推荐阅读
- bash - 第一次迭代后 Bash 循环停止
- javascript - 引导下拉菜单或输入类型单选不起作用
- tcp - 有没有办法使用 netstat 获取端口请求?
- javascript - 确认对话框未显示
- postgresql - 使用 gist 的 PostgreSQL 唯一索引
- c++ - GMock:匹配EXPECT_CALL参数的地址
- javascript - Vue CKEditor 分别获取标题和正文
- python - 使用 select_related('related') 后的 Django ORM object.related.id vs object.related_id
- android - 在我的情况下,在启用 proguard 的情况下占用 singed apk 时发生崩溃
- scipy - scipy.optimize.minimize - 多变量优化