$ go get github.com/zoer/locker
package main
import (
"context"
"log"
etcd "github.com/coreos/etcd/clientv3"
)
func main() {
// connect to Etcd instance
cl, err := clientv3.NewFromURL("127.0.0.1:2379")
if err != nil {
log.Fatalf("unable connect to Etcd")
}
lkr := NewEtcd(cl)
// cancel the lock via context timeout after 30 seconds
ctx, _ := context.WithTimeout(context.TODO(), 30*time.Second)
l, err := lkr.Lock(ctx, WithKey("lock-key"))
if err != nil {
log.Fatalf("unable get a lock: %v", err)
}
defer l.Unlock()
// ...
}