gpt4 book ai didi

go - level-db golang 实现覆盖现有值?

转载 作者:IT王子 更新时间:2023-10-29 02:06:17 25 4
gpt4 key购买 nike

我正在尝试使用 leveldb-g 实现并遇到一些问题。

这是我的实现(基于另一个答案 here

package propertyData

import (
"code.google.com/p/leveldb-go/leveldb/db"
"code.google.com/p/leveldb-go/leveldb/table"
"log"
"runtime"
)

const (
DBFILE = "./admin.db"
)

var DBFS = db.DefaultFileSystem

func AddDataToProperty(property, value string) {
Connection, e := DBFS.Create(DBFILE)
Check(e)
w := table.NewWriter(Connection, nil)
defer w.Close()

e = w.Set([]byte(property), []byte(value), nil)
}

func GetDataFromProperty(property string) string {

v := findOne([]byte(property))

return string(v)
}

func findOne(k []byte) []byte {
Connection, e := DBFS.Open(DBFILE)
Check(e)
r := table.NewReader(Connection, nil)
v1, err := r.Get([]byte(k), nil)
if err != nil {
log.Fatalf("An error occurred finding one", err.Error())
}

return v1

}

func Check(e error) {
if e != nil {
_, file, line, _ := runtime.Caller(1)
log.Fatalf("Bad Happened: %s, %s", file, line)
}
}

和一个测试:

package propertyData

import (
"com.levelsbeyond/admin/propertyData"
"log"
"os"
"testing"
)

func TestAddProperty(t *testing.T) {
os.RemoveAll("./admin.db")

propertyData.AddDataToProperty("test.property", "one")
propertyData.AddDataToProperty("test.property", "two")
propertyData.AddDataToProperty("test.property", "three")

propertyValue := propertyData.GetDataFromProperty("test.property")
log.Println(propertyValue)

propertyData.AddDataToProperty("test.different", "four")
propertyValue = propertyData.GetDataFromProperty("test.different")
log.Println(propertyValue)

propertyValue = propertyData.GetDataFromProperty("test.property")
log.Println(propertyValue)

}

哪些输出:

=== RUN TestAddProperty
2013/09/16 10:47:50 three
2013/09/16 10:47:50 four
2013/09/16 10:47:50
--- PASS: TestAddProperty (0.00 seconds)

这就像写第二个属性(“property.different”)覆盖我已经在其中的值。我确定我在做一些愚蠢的事情,任何帮助将不胜感激。

编辑

我在 findOne 函数中添加了一些错误处理(感谢@miltonb),实际上我在那里遇到了一个错误,尽管我不确定该怎么做:

=== RUN TestAddProperty
2013/09/16 15:36:34 three
2013/09/16 15:36:34 four
2013/09/16 15:36:34 An error occurred finding one%!(EXTRA string=leveldb/db: not found)
exit status 1
FAIL command-line-arguments 0.018s

最佳答案

使用看起来更好的文档(例如 levidb)更改为 leveldb 的另一个实现 http://godoc.org/github.com/jmhodges/levigo .

关于go - level-db golang 实现覆盖现有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18833310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com