etcd clientv3的基本使用

Lacie ·
更新时间:2024-09-20
· 731 次阅读

本文主要介绍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__



etcd

需要 登录 后方可回复, 如果你还没有账号请 注册新账号