Gox语言中内置了NoSQL数据库Badger,这是一个典型的基于文件系统的KV数据库,即键值对数据库。
我们直接看一个例子就会有直观的了解:
// 设置github/dgraph-io/badger包的简称,注意该报中因为有连字符,因此会被省略
badger = github_dgraphio_badger
// 创建或打开数据库
dbT, errT = badger.Open(badger.DefaultOptions(`c:\test\db`))
if errT != nil {
log.Fatal(errT)
}
// 确保退出前关闭数据库
defer dbT.Close()
// 准备用于测试的数据,是映射类型的数据
dataT = make(map[string]string)
dataT["ok"] = "yes"
dataT["名字"] = "张三"
// 新建一个事务
transT = dbT.NewTransaction(true)
// 遍历测试数据并存入数据库
for k, v = range dataT {
// 将对应的键值对存入
errT = transT.Set([]byte(k), []byte(v))
if errT != nil {
fmt.Printf("设置KV对时发生错误:%v", errT.Error())
}
}
// 提交事务,此时才真正写入数据库
_ = transT.Commit()
// 输出分隔线
fmt.Printf("\n-----\n")
// 再次新建一个事务用于查询
transT = dbT.NewTransaction(true)
// 查询键名为ok对应的键值
itemT, errT = transT.Get([]byte("ok"))
if errT != nil {
log.Fatalf("获取KV对时发生错误:%v", errT)
}
// 获取键值
valueT, errT = itemT.ValueCopy(nil)
if errT != nil {
log.Fatalf("获取KV对值时发生错误:%v", errT)
}
fmt.Printf("获取到的键名为%v的键值:%v\n", "ok", string(valueT))
// 用只读模式打开数据库后遍历其中所有的键值对
errT = dbT.View(func(txn) {
// 准备遍历数据库中键值对的设置参数,这里用的是默认设置
optionsT = new(badger.IteratorOptions)
optionsT.PrefetchValues = true
optionsT.PrefetchSize = 100
optionsT.Reverse = false
optionsT.AllVersions = false
// 设置预获取的数量
optionsT.PrefetchSize = 10
// 创建遍历用的枚举对象
iteratorT = txn.NewIterator(*optionsT)
// 确保枚举对象被关闭
defer iteratorT.Close()
// 进行遍历
iteratorT.Rewind()
for iteratorT.Valid() {
// 获取一个枚举值
itemT = iteratorT.Item()
// 获取该枚举值中的键值
k = itemT.Key()
// 调用匿名函数获取键值并处理
errT = itemT.Value(func(v) {
fmt.Printf("键名:%s,键值:%s\n", k, v)
return nil
})
if errT != nil {
return errT
}
iteratorT.Next()
}
return nil
})
if errT != nil {
log.Fatalf("遍历KV对时发生错误:%v", errT)
}
fmt.Printf("\n-----\n")
代码中已经有详细的解释,一看就懂,在这里就不过多解释了。一定需要注意的是,要注意处理异常,如果数据库没有正确被关闭,可能会带来一些异常情况。真出现这种情况时,直接删除数据库目录下所有文件即可,平时注意备份。
更多关于badger的文档,可以参考这里。