2017-07-25 28 views
1

我獲得性LevelDB的所有關鍵-VAL到地圖[字符串] []字節,但它沒有運行作爲我的厚望。 代碼是如下golang性LevelDB得到快照錯誤

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

回答

0

問題在於鑄造類型(byte[]string等)。

你要打印string值。爲了避免不必要的鑄造應用以下修改:

  • 變化data初始化成data := make(map[string]string)
  • 分配值到data與`數據[串(鍵)] =串(值)(順便說一下,不使用資本變量你不打算出口)
  • 打印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 
+0

非常感謝您的回答,它works.But爲什麼值改變了嗎?有點困惑。 –