leveldb-go example, docs

匿名 (未验证) 提交于 2019-12-03 08:50:26

问题:

LevelDB-Go is port of LevelDB in Go language. LevelDB-Go often referred as native alternative for Go apps. Website has no examples and no documentation.

Should I learn it by reading source code? or there is another website with examples and docs?

Does library support concurrency?

回答1:

I played around a little with leveldb Here is what I got so far. This 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) {     p.K = k     p.V = v }  func (items *kvs) PutKVs() {     fmt.Println(items) }  func (p *kv) GetKV() (key []byte, value []byte) {     key = p.K     value = p.V     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 } 


回答2:

If I recall from the mailing lists at this time LevelDB-Go is not complete. That likely explains the lack of documentation and examples. You could use the projects issue tracker to request documentation and/or ping the authors to see if it's ready for use or not.



回答3:

LevelDB-Go is unfinished, but there is wrapper for leveldb available, named levigo. You can consult its documentation too.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!