package main import "log" import "io/ioutil" import "github.com/dgraph-io/badger" type KeyValueStore struct { db *badger.DB } func NewKeyValueStore() *KeyValueStore { kv := new(KeyValueStore) kv.init() return kv } func (kv *KeyValueStore) init() { dir, err := ioutil.TempDir("", "badger") if err != nil { log.Fatal(err) } opts := badger.DefaultOptions opts.Dir = dir opts.ValueDir = dir kv.db, err = badger.Open(opts) if err != nil { log.Fatal(err) } } func (kv *KeyValueStore) Close() { kv.db.Close() } func (kv *KeyValueStore) Put(key *string, value *string) error { txn := kv.db.NewTransaction(true) // Read-write txn err := txn.Set([]byte(*key), []byte(*value)) if err != nil { log.Fatal(err) } err = txn.Commit(nil) if err != nil { log.Fatal(err) } return nil } func (kv *KeyValueStore) Get(key *string) (*string, error) { txn := kv.db.NewTransaction(true) // Read-write txn item, err := txn.Get([]byte(*key)) if err != nil { return nil, err } val, err := item.ValueCopy(nil) if err != nil { return nil, err } s := string(val) return &s, nil }