GO-操作etcd简单示例
go操作etcd
etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。
创建测试项目
- 创建项目
go mod init goetcd
- 下载go依赖库sarama
go get go.etcd.io/etcd/clientv3
注意事项
- 在windows平台上下载安装clientv3出错(因grpc v1.27.0+版本的google.golang.org/grpc包不支持etcdv3引起的)
解决办法修改依赖版本
#修改依赖
go mod edit -require=google.golang.org/grpc@v1.26.0
或在go.mod里加上
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
操作
put和get操作
put
命令用来设置键值对数据,get
命令用来根据key获取值。
package main
import (
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"time"
"go.etcd.io/etcd/clientv3"
)
var (
dialTimeout = 5 * time.Second
requestTimeout = 4 * time.Second
endpoints = []string{"https://192.168.10.190:2379", "https://192.168.10.191:2379", "https://192.168.10.192:2379"}
etcdCert = "etcd.pem"
etcdCertKey = "etcd-key.pem"
etcdCa = "ca.pem"
)
func main() {
// 创建连接-TLS
cert, err := tls.LoadX509KeyPair(etcdCert, etcdCertKey)
if err != nil {
fmt.Printf("cert failed, err:%v\n", err)
return
}
caData, err := ioutil.ReadFile(etcdCa)
if err != nil {
return
}
pool := x509.NewCertPool()
pool.AppendCertsFromPEM(caData)
_tlsConfig := &tls.Config{
Certificates: []tls.Certificate{cert},
RootCAs: pool,
}
cfg := clientv3.Config{
Endpoints: endpoints,
DialTimeout: dialTimeout,
TLS: _tlsConfig,
}
cli, err := clientv3.New(cfg)
if err != nil {
// handle error
fmt.Printf("connect to etcd failed, err:%v\n", err)
return
}
fmt.Println("connect to etcd success")
defer cli.Close()
// put
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
_, err = cli.Put(ctx, "标", "hello")
cancel()
if err != nil {
fmt.Printf("put to etcd failed, err:%v\n", err)
return
}
// get
ctx, cancel = context.WithTimeout(context.Background(), requestTimeout)
resp, err := cli.Get(ctx, "标")
cancel()
if err != nil {
fmt.Printf("get from etcd failed, err:%v\n", err)
return
}
for _, kv := range resp.Kvs {
fmt.Printf("%s:%s\n", kv.Key, kv.Value)
}
}
- 运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)