Golang 入门资料+笔记

golang bolt 数据库

2020-04-21  本文已影响0人  zidea
golang-gopher.png

最近学着做 golang 编写区块链系统,用到了 bolt 这个纯 golang 语言的简易数据库 bolt。字节数组作为基本数据类型以键值对形式保存数据。今天就通过一些简单示例来演示如何使用 bolt 数据库

个人对 bolt 还算连接,也是刚刚接触,所以就是现学现分享,开始使用这个 bolt 数据库,先简单了解一些 bolt 存储数据的结构,在数据库中有多个 bucket,通过 bucket 将数据库进行划分为一个一个存储数据区域,然后我们在每一个块 bucket 中以键值对形式存储数据。

package main

import (
    "fmt"
    "log"
    "github.com/boltdb/bolt"
)

要使用 bolt 我们需要下载并安装 github.com/boltdb/bolt,go 没有很好包管理工具这一点与rust相比还是逊色不少。希望 golang 早日有好的包管理工具,javascript 成功归功于 npm。


func createDB() {
    db, err := bolt.Open("my.db", 0600, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}

插入数据方法

boltdb的读写事务操作我们可以使用DB.Update()来完成

func insertRecord(k string, v string) {

    db, err := bolt.Open("my.db", 0600, nil)

    defer db.Close()

    if err != nil {
        log.Fatal(err)
    }

    db.Update(func(tx *bolt.Tx) error {
        b, err := tx.CreateBucket([]byte("mbucket"))
        if err != nil {
            return fmt.Errorf("create bucket: %s", err)
        }
        err = b.Put([]byte(k), []byte(v))
        return nil
    })
}

在 bolt 插入和更新数据都用 Update 接收一个闭包,通过闭包可以获得事务对象,调用事务对象 tx 的 CreateBucket 方法来创建一个 bucket。我们调用返回的 bucket 的对象 Put 方法便可以插入数据,插入键值对的键和值都是字节数组类型。

搜索数据


func searchRecordByKey(k string) {
    db, err := bolt.Open("my.db", 0600, nil)

    defer db.Close()

    if err != nil {
        log.Fatal(err)
    }

    db.View(func(tx *bolt.Tx) error {
        b := tx.Bucket([]byte("mbucket"))
        v := b.Get([]byte(k))
        fmt.Printf("The answer is: %s\n", v)
        return nil
    })
}

func main() {

    // insertRecord("1", "hello")
    searchRecordByKey("1")
}
上一篇 下一篇

猜你喜欢

热点阅读