本文主要介绍etcd 的clientv3的基本使用。在介绍之前,需要了解到的是v3版本的client和etcdctrl使用的是不通的存储空间,所以说不能通过etcdctl命令去访问client写入的数据,他们时间是存储隔离的。
好,下面上货。
package main import ( "context" "fmt" "github.com/google/uuid" "go.etcd.io/etcd/clientv3" "time" ) func main() { rootContext := context.Background() cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"}, DialTimeout: 5 * time.Second, }) if err != nil { // handle error! fmt.Errorf("error connect etcd %v", err) } defer cli.Close() testFunc(cli, rootContext) } //基本测试(获取值,设置值) func testFunc(cli *clientv3.Client, rootContext context.Context) { kvc := clientv3.NewKV(cli) //获取值 ctx, cancelFunc := context.WithTimeout(rootContext, time.Duration(2)*time.Second) response, err := kvc.Get(ctx, "cc") cancelFunc() if err != nil { fmt.Println(err) } kvs := response.Kvs fmt.Println(kvs) fmt.Printf("last value is :%s\r\n", string(kvs[0].Value)) //设置值 uuid := uuid.New().String() fmt.Printf("new value is :%s\r\n", uuid) ctx2, cancelFunc2 := context.WithTimeout(rootContext, time.Duration(2)*time.Second) _, err = kvc.Put(ctx2, "cc", uuid) cancelFunc2() if err != nil { fmt.Println(err) } }
运行结果:
注意:在引入包的go.etcd.io/etcd/clientv3 的时候有的时候是不成功的,问题大多出现在这里:
github.com/coreos/go-systemd
这时候我们可以在mod中使用replace命令,让对github.com/coreos/go-systemd的依赖指向本地。
首先把需要的go-systemd从git上下载下来,然后在go mod中说明replace:
replace github.com/coreos/go-systemd => /Users/XXX/gopath/src/github.com/coreos/go-systemd
这样就能够顺利的使用clientv3的库了。
作者:0day__