我正在将leveldb的所有key-val都获取到一个映射字符串字节,但它并没有像我预期的那样运行。代码如下
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 key6:value9 key7:value9 key8:value9 key1:value9 key2:value9 key4:value9 key5:value9 key9:value9 key0:value9而不是key0:value0
发布于 2017-07-25 21:34:22
问题出在类型转换(byte[]到string,等等)上。
您正在尝试打印string值。为避免不必要的强制转换,请应用以下修改:
使用``datastring( data := make(map[string]string)
data )(顺便说一句,不要对不打算使用data := make(map[string]string)
data初始化更改为data := make(map[string]string)
这应该会产生以下结果:
key0:value0
key1:value1
key7:value7
key2:value2
key3:value3
key4:value4
key5:value5
key6:value6
key8:value8
key9:value9https://stackoverflow.com/questions/45302497
复制相似问题