etcdgo是golang中一个常用的etcd客户端驱动包,它提供了简单而强大的API来操作etcd集群。
以下是使用etcdgo实现常见操作的示例代码:
- 连接到etcd集群
endpoints := []string{"http://localhost:2379"}
cfg := clientv3.Config{
Endpoints: endpoints,
DialTimeout: 5 * time.Second,
}
cli, err := clientv3.New(cfg)
if err != nil {
log.Fatal(err)
}
defer cli.Close()
在上面的代码中,我们创建了一个clientv3.Client对象并连接到本地etcd集群。我们还定义了一些配置参数,例如连接超时时间。
- 设置键值对
key := "my-key"
value := "my-value"
_, err = cli.Put(context.Background(), key, value)
if err != nil {
log.Fatal(err)
}
在上面的代码中,我们使用Put方法将一个键值对写入etcd。如果该键已经存在,则会将其覆盖为新值。
- 获取键值对
resp, err := cli.Get(context.Background(), key)
if err != nil {
log.Fatal(err)
}
for _, ev := range resp.Kvs {
fmt.Printf("key=%s, value=%s\n", ev.Key, ev.Value)
}
在上面的代码中,我们使用Get方法获取给定键的值。返回结果是一个Response对象,其中包含匹配键的所有版本(可能有多个)。
- 监听某个前缀下的所有键值对变化
prefix := "my-prefix/"
watcher := clientv3.NewWatcher(cli)
ch := watcher.Watch(context.Background(), prefix, clientv3.WithPrefix())
for {
select {
case resp := <- ch:
for _, ev := range resp.Events {
fmt.Printf("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
}
case <- ctx.Done():
return
}
}
在上面的代码中,我们使用Watch方法创建一个监视器来监听以给定前缀开头的所有键的更改。如果有任何更改发生,则将其打印到控制台。
- 删除某个键值对
_, err = cli.Delete(context.Background(), key)
if err != nil {
log.Fatal(err)
}
在上面的代码中,我们使用Delete方法删除指定键的值。如果该键不存在,则不会发生任何事情。
以上是etcdgo常见操作的示例代码,它们涵盖了etcd基本操作中最常用的功能。当然,在实际应用程序中,还需要考虑更多复杂情况下的处理,例如分布式锁等。




