您当前的位置:学无止境 > go简单操作etcd网站首页学无止境
go简单操作etcd
发布时间:2021-03-10 16:36:05编辑:sanqing查看次数:827
安装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,高可用,分布式,数据存储系统
评论: