QT开发中文网

undefined: mvccpb

很抱歉,我之前提供的代码中使用了mvccpb包。这是etcd内部使用的私有协议缓冲区(protobuf)包,不应该在客户端代码中直接使用。

正确的做法是导入etcd客户端库所提供的clientv3/mvccpb包,并使用其中定义的类型。例如,上面示例代码中可以这样导入:

import (
    "fmt"
    "context"
    "go.etcd.io/etcd/client/v3"
    mvccpb "go.etcd.io/etcd/client/v3/mvccpb"
)

然后在事件处理程序中使用mvccpb.Event_EventType枚举类型,如下所示:

watcher := client.Watch(context.Background(), "/example/key", clientv3.WithPrefix(), clientv3.WithRev(0))
for watchResponse := range watcher {
    for _, event := range watchResponse.Events {
        switch event.Type {
        case mvccpb.Event_PUT:
            if len(event.PrevKv.Value) > 0 { // key updated
                fmt.Printf("Key updated! OldKey=%s OldValue=%s NewKey=%s NewValue=%s\n", event.PrevKv.Key, event.PrevKv.Value, event.Kv.Key, event.Kv.Value)
            } else { // key created
                fmt.Printf("Key created! Key=%s Value=%s\n", event.Kv.Key, event.Kv.Value)
            }
        case mvccpb.Event_DELETE:
            fmt.Printf("Key deleted! Key=%s Value=%s\n", event.Kv.Key, event.Kv.Value)
        default:
            fmt.Println("Unknown Event Type!")
        }
    }
}

请注意,这里的事件类型是mvccpb.Event_EventType,而不是我之前错误地使用的mvccpb.PUTmvccpb.DELETE

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=2435

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?