本文主要介绍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架构师必看的立场,转载请标明来源出处