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()
}
```
';