valkeyrie provides a Go native library to store metadata using Distributed Key/Value stores (or common databases).
A storage backend in valkeyrie implements (fully or partially) the Store interface.
| Calls | Etcd | 
|---|---|
| Put | 🟢️ | 
| Get | 🟢️ | 
| Delete | 🟢️ | 
| Exists | 🟢️ | 
| Watch | 🟢️ | 
| WatchTree | 🟢️ | 
| NewLock (Lock/Unlock) | 🟢️ | 
| List | 🟢️ | 
| DeleteTree | 🟢️ | 
| AtomicPut | 🟢️ | 
| AtomicDelete | 🟢️ | 
Etcd version >= 3.0 with APIv3
package main
import (
	"context"
	"log"
	"github.com/kvtools/etcdv3"
	"github.com/kvtools/valkeyrie"
)
func main() {
	ctx := context.Background()
	config := &etcdv3.Config{
        Password: "example",
	}
	kv, err := valkeyrie.NewStore(ctx, etcdv3.StoreName, []string{"localhost:8500"}, config)
	if err != nil {
		log.Fatal("Cannot create store")
	}
	key := "foo"
	err = kv.Put(ctx, key, []byte("bar"), nil)
	if err != nil {
		log.Fatalf("Error trying to put value at key: %v", key)
	}
	pair, err := kv.Get(ctx, key, nil)
	if err != nil {
		log.Fatalf("Error trying accessing value at key: %v", key)
	}
	log.Printf("value: %s", string(pair.Value))
	err = kv.Delete(ctx, key)
	if err != nil {
		log.Fatalf("Error trying to delete key %v", key)
	}
}