golang 示例

最后更新于:2022-04-02 04:01:08

[TOC] ## 概述 Leveldb 是Google 开源的高性能的key-value 数据库,原来由C++ 写,现在由官方用go 实现,效果更好 不是服务,只是库,不会产生新端口 ## 安装 `go get github.com/syndtr/goleveldb/leveldb` ## 示例 ``` package main import ( "fmt" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/util" ) func main(){ // 不使用内存数据,直接取硬盘数据: /* o := &opt.Options{ Filter: filter.NewBloomFilter(10), }*/ db, err := leveldb.OpenFile("./db", nil) if err != nil { panic(err) } // put err = db.Put([]byte("aaa"), []byte("bbb"), nil) if err != nil { panic(err) } // get data, err := db.Get([]byte("aaa"), nil) if err != nil { panic(err) } fmt.Printf("%+v\n", data) // delete err = db.Delete([]byte("aaa"),nil) if err != nil { panic(err) } err = db.Put([]byte("aaa"), []byte("bbb"), nil) if err != nil { panic(err) } err = db.Put([]byte("aac"), []byte("bbc"), nil) if err != nil { panic(err) } // 数据库遍历 iter := db.NewIterator(nil, nil) for iter.Next() { key := iter.Key() value := iter.Value() fmt.Printf("key :%v value: %v\n",string(key),string(value) ) } iter.Release() err = iter.Error() if err != nil { panic(err) } // 按前缀查询 iter1 := db.NewIterator(util.BytesPrefix([]byte("aa")), nil) for iter1.Next() { key := iter1.Key() value := iter1.Value() fmt.Printf("1 key :%v value: %v\n",string(key),string(value) ) } iter1.Release() err = iter.Error() if err != nil { panic(err) } //批量写 b := &leveldb.Batch{} b.Put([]byte("foo"),[]byte("value")) b.Put([]byte("bar"),[]byte("another value")) b.Delete([]byte("baz")) err = db.Write(b, nil) if err != nil { panic(err) } // 不使用内存数据,直接取硬盘数据: defer db.Close() } ```
';