leveldb-g 実装を使用しようとしていますが、いくつか問題があります。
これが私の実装です(ここの別の回答に基づいています
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)
2 番目のプロパティ ("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