您当前的位置:学无止境 > go简单操作etcd网站首页学无止境
go简单操作etcd
发布时间:2021-03-10 16:36:05编辑:sanqing查看次数:846
安装etcd,参考:https://lovesanqing.com/knowledge-177.html
开启etcd服务端
安装etcd/clientv3
go get go.etcd.io/etcd/clientv3
main.go
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"time"
)
var (
cli *clientv3.Client
)
func Init(addr string, timeout time.Duration) (err error){
cli,err = clientv3.New(clientv3.Config{
Endpoints: []string{addr},
DialTimeout: timeout,
})
if err != nil{
fmt.Println("connect to etcd failed,err:",err)
return
}
return
}
func main() {
addr := "127.0.0.1:2379"
timeout := 5 * time.Second
err := Init(addr,timeout)
if err != nil {
fmt.Printf("etcd.Init err:%vn",err)
return
}
fmt.Println("etcd Init success")
// put
ctx,cancel := context.WithTimeout(context.Background(),time.Second)
_, err = cli.Put(ctx,"key","sanqing")
cancel()
if err != nil{
fmt.Printf("cli.Put err:%vn",err)
return
}
// delete
ctx,cancel = context.WithTimeout(context.Background(),time.Second)
_,err = cli.Delete(ctx,"key2")
cancel()
if err != nil{
fmt.Printf("cli.Delete err:%vn",err)
return
}
// get
ctx,cancel = context.WithTimeout(context.Background(),time.Second)
resp,err := cli.Get(ctx,"key")
cancel()
if err != nil{
fmt.Printf("cli.Get err:%vn",err)
return
}
fmt.Println(resp)
for _,ev :=range resp.Kvs{
fmt.Printf("%s:%sn",ev.Key,ev.Value)
}
// watch
// 派一个哨兵 一直监视 key 的变化(新增,修改,删除)
ch := cli.Watch(context.Background(),"key")
// 尝试重通道取值(监视信息)
for wresp := range ch{
for _,evt := range wresp.Events{
fmt.Printf("type:%v; key:%v; value:%v n",evt.Type,string(evt.Kv.Key),string(evt.Kv.Value))
}
}
}运行main.go
go run main.go
如果报 undefined: balancer.PickOptions 等undefined错误 go.mod里面的grpc版本改成 v1.26.0
然后运行
go mod tidy
运行main.go
go run main.go
关键字词:go,etcd,高可用,分布式,数据存储系统
评论:
