package main
// 将内存中的数据备份到本地,方便程序退出后仍然能够访问数据
import (
"fmt"
"log"
"github.com/boltdb/bolt"
)
func main() {
db, err := bolt.Open("my.db", 0600, nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 创建表
err = db.Update(func(tx *bolt.Tx) error {
// 判断要创建的mytable是否存在
b := tx.Bucket([]byte("mytable"))
if b == nil {
// 创建叫 mytable的表
_, err := tx.CreateBucket([]byte("mytable"))
if err != nil {
log.Fatal(err)
}
}
return nil
})
if err != nil {
log.Fatal(err)
}
// 更新表数据
// 假设计算机内存中已经存在一个字符串的映射,这个映射需要被缓存到boltdb中
err = db.Update(func(tx *bolt.Tx) error {
// 取出名叫"mytable"的表
b := tx.Bucket([]byte("mytable"))
if b != nil {
err := b.Put([]byte("1"), []byte("0x0000"))
if err != nil {
log.Fatal(err)
}
err2 := b.Put([]byte("2"), []byte("0x0001"))
if err != nil {
log.Fatal(err2)
}
}
return nil
})
if err != nil {
log.Fatal(err)
}
// 查询表数据
err = db.Update(func(tx *bolt.Tx) error {
// 取出名为mytable的表
b := tx.Bucket([]byte("mytable"))
// 往表里存储数据
if b != nil {
data1 := b.Get([]byte("1"))
fmt.Printf("%s\n", data1)
data2 := b.Get([]byte("2"))
fmt.Printf("%s\n", data2)
}
// 返回nil
return nil
})
if err!= nil{
log.Fatal(err)
}
}