我正在尝试编写代码,我需要在其中找到密钥是否存在于etcd中。我尝试了这个:

_, err = kapi.Get(context.Background(), key, nil)
        if err != nil {
          return err
        } else { ...


但是,即使密钥不在群集中,错误也始终是nil

知道我在做什么错吗?还是要进行其他API调用?

最佳答案

如果您在此处使用go client v3 KV客户端:https://godoc.org/go.etcd.io/etcd/clientv3#KV

它返回以下类型:
https://godoc.org/go.etcd.io/etcd/etcdserver/etcdserverpb#RangeResponse

type RangeResponse struct {
    Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"`
    // kvs is the list of key-value pairs matched by the range request.
    // kvs is empty when count is requested.
    Kvs []*mvccpb.KeyValue `protobuf:"bytes,2,rep,name=kvs" json:"kvs,omitempty"`
    // more indicates if there are more keys to return in the requested range.
    More bool `protobuf:"varint,3,opt,name=more,proto3" json:"more,omitempty"`
    // count is set to the number of keys within the range when requested.
    Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"`
}

因此,如您所见,有一个Count属性和一个Kvs属性,如果您想检查响应中是否包含密钥,则只需检查Count > 0len(res.Kvs) > 0

关于go - 在etcd集群中查找 key 的API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55350494/

10-16 06:35