• 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

    最后可以正常运行!

  • 相关阅读:
    10 个迅速提升你 Git 水平的提示
    git-自动补全
    Andriod Atom x86模拟器启动报错
    Android SDK Manager 无法更新SDK
    tiny4412 解决内核编译版本号问题
    Move resources allocated using unmanaged interface to managed devm interface
    原理图学习
    解决tiny4412在win7 64位上adb无法使用失败的问题
    popcount 算法分析
    linux中断申请之request_threaded_irq
  • 原文地址:https://www.cnblogs.com/bonelee/p/6899754.html
Copyright © 2020-2023  润新知