zoukankan      html  css  js  c++  java
  • golang LMDB入门例子——尼玛,LMDB的文档真的是太少了

    使用的是这个库:https://github.com/szferi/gomdb

    安装:

    go get github.com/szferi/gomdb

    代码:

    package main
    
    
    import (
        "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() {
        fmt.Printf("Hello, world.
    ")
        // create a directory to hold the database
        path, _ := ioutil.TempDir("", "mdb_test")
        defer os.RemoveAll(path)
    
        // open the db
        env, _ := NewEnv()
        env.SetMapSize(1 << 20) // max file size
        env.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 data
        txn, _ = env.BeginTxn(nil, 0)
        num_entries := 5
        for 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 database
        stat, _ := env.Stat()
        fmt.Println(stat.Entries)
    
        // scan the database
        txn, _ = 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
    ", bkey, bval)
        }
    
        // random access
        bval, _ := txn.Get(dbi, []byte("Key-3"))
        fmt.Println(string(bval))
        // Output:
        // 5
        // Key-0: Val-0
        // Key-1: Val-1
        // Key-2: Val-2
        // Key-3: Val-3
        // Key-4: Val-4
        // Val-3
    }

    go build main.go

    运行:

    ./main 

    出错:

    panic: runtime error: cgo argument has Go pointer to Go pointer

    解决方法:

    export GODEBUG=cgocheck=0

    最后可以正常运行!

  • 相关阅读:
    微软职位内部推荐-Senior Software Engineer-DUT
    微软职位内部推荐-Senior PM
    面试题:打印蛇形二维数组
    微软职位内部推荐-Principal Software Eng Mgr
    微软职位内部推荐-Senior SDE
    微软职位内部推荐-Senior Software Engineer II-Search
    微软职位内部推荐-Software Engineer II-Search
    分布式锁的实现方式
    Java集合框架实现自定义排序
    Redis的缓存策略和主键失效机制
  • 原文地址:https://www.cnblogs.com/bonelee/p/6899754.html
Copyright © 2011-2022 走看看