etcd clientv3的基本使用

2021-05-14 17:15:38 浏览数 (1)

本文主要介绍etcd 的clientv3的基本使用。在介绍之前,需要了解到的是v3版本的client和etcdctrl使用的是不通的存储空间,所以说不能通过etcdctl命令去访问client写入的数据,他们时间是存储隔离的。

好,下面上货。

代码语言:javascript复制
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 :%srn", string(kvs[0].Value))
	//设置值
	uuid := uuid.New().String()
	fmt.Printf("new value is :%srn", 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:

代码语言:javascript复制
replace github.com/coreos/go-systemd => /Users/XXX/gopath/src/github.com/coreos/go-systemd

这样就能够顺利的使用clientv3的库了。

本文来源0day__,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处

0 人点赞