2017-07-25 3 views
1

Je reçois leveldb tous les key-val à un octet de carte [chaîne] [], mais il ne fonctionne pas comme mon attente. Code est comme ci-dessousgolang leveldb get erreur d'instantané

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)) 
    } 
} 

mais le résultat est inférieur key3: value9 key6: value9 key7: value9 key8: value9 key1: value9 key2: value9 key4: value9 key5: value9 key9: value9 Key0: value9 plutôt pas Key0: value0

Répondre

0

problème est avec coulée autour de types (byte[] à string, etc.). Vous essayez d'imprimer les valeurs string. Pour éviter la coulée inutile d'appliquer les modifications suivantes:

  • changement data initialisation dans data := make(map[string]string)
  • Affectez des valeurs dans data avec `data [string (Key)] = chaîne (valeur) (par ailleurs, ne pas utiliser la capitalisation pour les variables que vous n'êtes pas l'intention d'exporter)
  • Imprimer les valeurs de data avec des fmt.Println(k + ":" + v))

Cela devrait produire le résultat suivant:

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

merci beaucoup pour votre réponse et cela fonctionne.Mais pourquoi la valeur est-elle modifiée? Un peu confus. –