Example leveldb-go, docs

LevelDB-Go is the LevelDB port in the Go language. LevelDB-Go is often referred to as a native alternative to Go applications. The website has no examples and documentation.

Should I study it while reading the source code? or is there another site with examples and documents?

Does concurrency library support?

+4
source share
3 answers

I played a little with leveldb. That's what I got so far. That should get you started.

package main import ( "code.google.com/p/leveldb-go/leveldb/db" "code.google.com/p/leveldb-go/leveldb/table" "fmt" "runtime" ) type kv struct { K []byte V []byte } type kvs struct { items map[int]kv } func (p *kv) PutKV(k []byte, v []byte) { pK = k pV = v } func (items *kvs) PutKVs() { fmt.Println(items) } func (p *kv) GetKV() (key []byte, value []byte) { key = pK value = pV return } func Check(e error) { if e != nil { _, file, line, _ := runtime.Caller(1) } } func p(r []byte, e error) { if e != nil { return e } println(string(r)) } const ( DBFILE = "/tmp/leveldb2.db" ) var DBFS = db.DefaultFileSystem func main() { Connection, e := DBFS.Create(DBFILE) Check(e) w := table.NewWriter(Connection, nil) defer w.Close() e = w.Set([]byte("1"), []byte("red"), nil) Check(e) e = w.Set([]byte("2"), []byte("yellow"), nil) Check(e) e = w.Set([]byte("3"), []byte("blue"), nil) Check(e) e = w.Close() Check(e) w = nil count() fmt.Println("Printing # KV") itemsKV := readByte() fmt.Println(itemsKV[0]) fmt.Println(itemsKV[1]) fmt.Println(itemsKV[2]) println("Done Printing # KV") Connection, e = DBFS.Create(DBFILE) Check(e) w = table.NewWriter(Connection, nil) defer w.Close() e = w.Set([]byte("4"), []byte("green"), nil) Check(e) e = w.Set([]byte("5"), []byte("white"), nil) Check(e) e = w.Set([]byte("6"), []byte("black"), nil) Check(e) e = w.Close() Check(e) } func count() { Connection, e := DBFS.Open(DBFILE) Check(e) b := []byte("0") r := table.NewReader(Connection, nil) println("\n\n###### Counting ###### ") iter, n := r.Find(b, nil), 0 for iter.Next() { n++ println("Count # ", n) } e = r.Close() Check(e) println("#####Total: ", n) } func read() map[int64]string { Connection, e := DBFS.Open(DBFILE) Check(e) b := []byte("0") r := table.NewReader(Connection, nil) items := map[int64]string{} iter, _ := r.Find(b, nil), 0 for iter.Next() { k := iter.Key() v := iter.Value() items[int64(k[0])] = string(v) } e = r.Close() Check(e) return items } func readByte() map[int]kv { Connection, e := DBFS.Open(DBFILE) Check(e) c := 0 b := []byte("0") r := table.NewReader(Connection, nil) //items := map[int64]kv{} item := new(kv) items := map[int]kv{} iter, _ := r.Find(b, nil), 0 for iter.Next() { k := iter.Key() v := iter.Value() item.PutKV(k, v) items[c] = *item c++ } e = r.Close() Check(e) return items } func findOne(k []byte) []byte { Connection, e := DBFS.Open(DBFILE) Check(e) b := []byte("0") r := table.NewReader(Connection, nil) iter, _ := r.Find(b, nil), 0 k = iter.Key() v := iter.Value() e = r.Close() Check(e) return v } 
+5
source

If I recall from the mailing lists, this time LevelDB-Go will not be completed. This probably explains the lack of documentation and examples. You can use the tracker to track projects to request documentation and / or track authors to make sure they are ready to use or not.

+1
source

LevelDB-Go is not complete, but there is an available shell for leveldb called levigo . You can also read its documentation .

+1
source

Source: https://habr.com/ru/post/1436894/


All Articles