gpt4 book ai didi

golang leveldb获取快照错误

转载 作者:IT王子 更新时间:2023-10-29 02:21:44 25 4
gpt4 key购买 nike

我得到了 leveldb 的所有键值到 map[string][]byte,但它没有按我的预期运行。代码如下

package main
import (
"fmt"
"strconv"
"github.com/syndtr/goleveldb/leveldb"
)
func main() {
db, err := leveldb.OpenFile("db", nil)
if err != nil {
panic(err)
}
defer db.Close()
for i := 0; i < 10; i++ {
err := db.Put([]byte("key"+strconv.Itoa(i)), []byte("value"+strconv.Itoa(i)), nil)
if err != nil {
panic(err)
}
}
snap, err := db.GetSnapshot()
if err != nil {
panic(err)
}
if snap == nil {
panic("snap shot is nil")
}
data := make(map[string][]byte)
iter := snap.NewIterator(nil, nil)
for iter.Next() {
Key := iter.Key()
Value := iter.Value()
data[string(Key)] = Value
}
iter.Release()
if iter.Error() != nil {
panic(iter.Error())
}
for k, v := range data {
fmt.Println(string(k) + ":" + string(v))
}
}

但结果如下 键3:值9 键6:值9 键7:值9 键8:值9 键1:值9 键2:值9 键4:值9 键5:值9 键9:值9 键0:值9而不是 key0:value0

最佳答案

问题在于类型转换(byte[]string 等)。

您正在尝试打印 string 值。为避免不必要的强制转换,请进行以下修改:

  • data初始化改为data := make(map[string]string)
  • 使用 `data[string(Key)] = string(Value) 将值赋给 data(顺便说一句,不要对您不打算导出的变量使用大写)<
  • 使用fmt.Println(k + ":"+ v))打印data的值

这应该会产生以下结果:

key0:value0
key1:value1
key7:value7
key2:value2
key3:value3
key4:value4
key5:value5
key6:value6
key8:value8
key9:value9

关于golang leveldb获取快照错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45302497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com