Leveldb是一个C++库,它有提供标准的C接口,头文件在include/leveldb/c.h中
levigo是leveldb 的一个go wrapper,它主要基于Leveldb中inlude/leveldb/c.h提供的方法做二次开发
开发过程,以添加一个简单的计算功能为例:
修改leveldb源码
在include/leveldb/c.h中添加以下声明:
extern int andre_add(const int a,const int b);
在db/c.cc中添加andre_add对应的实现:
int andre_add(const int a,const int b) {
return (a + b)*3;
}
重新编译安装Leveldb源码:
fun@fun:~/workspace/study/leveldb/leveldb$ make clean && make
fun@fun:~/workspace/study/leveldb/leveldb$ sudo cp libleveldb.a libleveldb.so.1.12 /usr/lib/
fun@fun:~/workspace/study/leveldb/leveldb$ sudo cp -r include/leveldb /usr/include/
至此,Leveldb库安装完毕。
Levigo二次开发:
为了方便开发,我将https://github.com/jmhodges/levigo fork了一份到自己的帐号下
执行以下操作将levigo安装到本地:
go get github.com/AndreMouche/levigo/
在$GOROOT下找到对应的源码,这里以修改options.go为例,在其中添加以下function以调用andre_add:
func Andre_add(a,b int) int {
pa := C.int(a)
pb := C.int(b)
return int(C.andre_add(pa,pb))
}
保存后,重新编译该代码:
fun@fun:~/software/go/go/bin/src/github.com/AndreMouche/levigo$ go clean github.com/AndreMouche/levigo
fun@fun:~/software/go/go/bin/src/github.com/AndreMouche/levigo$ go build github.com/AndreMouche/levigo
编译通过,向github提交修改文件
至此,在go中便可调用levigo.Andre_add()了。