如下,使用gomb库

package mainimport ("bytes""fmt""io/ioutil""os". "github.com/szferi/gomdb"
)// Most mdb functions/methods can return errors. This example ignores errors
// for brevity. Real code should check all return values.
func main() {// create a directory to hold the databasepath, _ := ioutil.TempDir("", "mdb_test")defer os.RemoveAll(path)// open the dbenv, _ := NewEnv()env.SetMapSize(1 << 20) // max file sizeenv.Open(path, 0, 0664)defer env.Close()txn, _ := env.BeginTxn(nil, 0)dbi, _ := txn.DBIOpen(nil, 0)defer env.DBIClose(dbi)txn.Commit()// write some datatxn, _ = env.BeginTxn(nil, 0)num_entries := 10for i := 0; i < num_entries; i++ {key := fmt.Sprintf("Key-%d", i)val := fmt.Sprintf("Val-%d", i)txn.Put(dbi, []byte(key), []byte(val), 0)}txn.Commit()// inspect the databasestat, _ := env.Stat()fmt.Println(stat.Entries)// scan the databasetxn, _ = env.BeginTxn(nil, RDONLY)defer txn.Abort()cursor, _ := txn.CursorOpen(dbi)defer cursor.Close()for {bkey, bval, err := cursor.Get(nil, nil, NEXT)if err == NotFound {break}if err != nil {panic(err)}fmt.Printf("%s: %s\n", bkey, bval)}// random accessbval, _ := txn.Get(dbi, []byte("Key-3"))fmt.Println(string(bval))fmt.Printf("*********range begin*********\n")bkey := []byte("Key-2")bkeyEnd := []byte("Key-5")// var MDB_SET_RANGE uint = 17// var op = MDB_SET_RANGE    var op uint = SET_RANGEfor {bkey, bval, err := cursor.Get(bkey, nil, op)if err == NotFound || bytes.Compare(bkey, bkeyEnd) > 0 {break}if err != nil {panic(err)}fmt.Printf("%s: %s\n", bkey, bval)op = NEXT}fmt.Printf("**********range end********\n")
}

结果如下:

10
Key-0: Val-0
Key-1: Val-1
Key-2: Val-2
Key-3: Val-3
Key-4: Val-4
Key-5: Val-5
Key-6: Val-6
Key-7: Val-7
Key-8: Val-8
Key-9: Val-9
Val-3
*********range begin*********
Key-2: Val-2
Key-3: Val-3
Key-4: Val-4
Key-5: Val-5
**********range end********

尼玛,还是参考BDB写出来的!

参考:https://stackoverflow.com/questions/18707751/retrieving-a-range-of-data-from-berkeley-db

BDB的例子:

void get(DB *dbp, int key1, int key2){DBC *curs;DBT k,v;int fl;// Get a cursordbp->cursor(dbp, NULL, &curs, 0);if (!curs) _dberr("can't get a cursor");// Set DBT for 1st key and valuememset(&v, 0, sizeof(DBT));memset(&k, 0, sizeof(DBT));k.data = &key1;k.size = sizeof(key1);fl = DB_SET_RANGE; // first key will be >=key1while (curs->c_get(curs, &k, &v, fl)==0 &&key2 >= *(int *)k.data){fl = DB_NEXT;// use v.data}
}

转载于:https://www.cnblogs.com/bonelee/p/6899979.html

golang LMDB入门例子——key range查询相关推荐

  1. golang LMDB入门例子——尼玛,LMDB的文档真的是太少了

    使用的是这个库:https://github.com/szferi/gomdb 安装: go get github.com/szferi/gomdb 代码: package mainimport (& ...

  2. Golang Web入门(2):如何实现一个RESTful风格的路由

    Golang Web入门(2):如何实现一个RESTful风格的路由 摘要 在上一篇文章中,我们聊了聊在Golang中怎么实现一个Http服务器.但是在最后我们可以发现,固然DefaultServeM ...

  3. Cassandra 单机入门例子——有索引

    入门例子: http://wiki.apache.org/cassandra/GettingStarted 添加环境变量并source生效,使得可以在任意位置执行cassandra/bin安装目录下的 ...

  4. Golang Web入门(4):如何设计API

    Golang Web入门(4):如何设计API 摘要 在之前的几篇文章中,我们从如何实现最简单的HTTP服务器,到如何对路由进行改进,到如何增加中间件.总的来讲,我们已经把Web服务器相关的内容大概梳 ...

  5. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. ibatis-2.3.4.726.jar ojdbc14.jar 2.创建类com/ ...

  6. 【Golang 快速入门】项目实战:即时通信系统

    Golang 快速入门 即时通信系统 - 服务端 版本一:构建基础 Server 版本二:用户上线功能 版本三:用户消息广播机制 版本四:用户业务层封装 版本五:在线用户查询 版本六:修改用户名 版本 ...

  7. golang快速入门[8.3]-深入理解IEEE754浮点数

    前文 golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速 ...

  8. Golang 汇编入门知识总结

    作者:ivansli,腾讯 IEG 运营开发工程师 在深入学习 Golang 的 runtime 和标准库实现的时候发现,如果对 Golang 汇编没有一定了解的话,很难深入了解其底层实现机制.在这里 ...

  9. Orleans 初接触(一) 入门例子

    [返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.Orleans入门例子 这个例子是跟着<Orleans入门例子>(https://www.cnblogs. ...

最新文章

  1. python打不开怎么办-python为什么打不开
  2. 零售业创新服务:Kochhaus杂货店按照菜谱陈列商品
  3. Altera的几个常用的Synthesis attributes(转载)
  4. leetcode 26. 删除有序数组中的重复项
  5. vue-js 特殊变量$event常识
  6. 在内存中创建临时表和表变量
  7. java开发入行真功夫pdf_Java开发入行真功夫
  8. 火狐浏览器允许ajax,ajax如何解决火狐浏览器或其它非ie浏览器的兼容性问题
  9. 多目标跟踪数据集 :mot16、mot17数据集介绍
  10. html 点击隐藏特效代码,vueJS简单的点击显示与隐藏的效果(实现代码)
  11. web通用组件+Axure原型+Axure元件库+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件
  12. 【MySQL数据库教程天花板】
  13. tv 斐讯n1原生android_斐讯T1刷原生安卓TV
  14. 台式电脑怎么装win10 win11重装win10系统
  15. 古风系统仙侠文推荐_古风系统仙侠文推荐_不容错过仙侠文强推:文笔超好,挑灯夜读系列,看完顿觉书荒......
  16. 16福师硬盘是计算机的,福师16春《计算机应用基础》在线作业一
  17. 513、Java Spring Cloud Alibaba -【Spring Cloud Alibaba Nacos】 2021.08.30
  18. wordpress 替换国外主题字体为微软雅黑
  19. 微信中html5获取手机号,微信小程序用户授权获取手机号(getPhoneNumber)
  20. python的if语句怎么写-Python的if语句

热门文章

  1. Java基础之Hibernate
  2. C++实现Linux下弹出U盘的方法
  3. 蓝牙管理软件_Mac蓝牙检测软件----BlueSense
  4. android jsoup简书,jsoup爬虫简书首页数据做个小Demo
  5. 在dw中如何调试html代码,如何在 Dreamweaver 中优化和调试代码 - Dreamweaver 用户指南...
  6. java 数组的索引值_按索引访问Java数组位置的值
  7. 手机号验证_国际手机号收不到微博验证短信,微博验证短信一直提示超过上限怎么办?...
  8. python中整数类型的表示需加引导符号_Python内置类型及常见问题
  9. 计算机系统结构研究分支,“计算机系统结构” 课程教学探讨[J] 电子科技大学.doc...
  10. linux的命令行操作和shell的区别