首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >golang leveldb获取快照错误

golang leveldb获取快照错误
EN

Stack Overflow用户
提问于 2017-07-25 19:53:35
回答 1查看 182关注 0票数 1

我正在将leveldb的所有key-val都获取到一个映射字符串字节,但它并没有像我预期的那样运行。代码如下

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2017-07-25 21:34:22

问题出在类型转换(byte[]string,等等)上。

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

使用``datastring( data := make(map[string]string)

  • Assign )=

  • ( data )(顺便说一句,不要对不打算使用data := make(map[string]string)

  • Assign的值进行export)

  • Print的变量使用大小写),将data初始化更改为data := make(map[string]string)

  • Assign值并将其转换为值

这应该会产生以下结果:

代码语言:javascript
复制
key0:value0
key1:value1
key7:value7
key2:value2
key3:value3
key4:value4
key5:value5
key6:value6
key8:value8
key9:value9
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45302497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档