golang leveldb得到快照错误

时间:2017-07-25 11:53:35

标签: go leveldb

我得到了leveldb的所有key-val到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))
    }
}

但结果如下     KEY3:value9     键6:value9     KEY7:value9     key8:value9     KEY1:value9     KEY2:value9     KEY4:value9     KEY5:value9     key9:value9     KEY0:value9 而不是key0:value0

1 个答案:

答案 0 :(得分:0)

问题在于围绕类型(byte[]string等)。

您正在尝试打印string值。为避免不必要的投射,请应用以下修改:

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

这应该产生以下结果:

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