undeclared name: mvccpb 错误通常是由于缺少引入相关的包或版本不兼容等问题导致的。在使用 etcd 的 watch 功能时,需要引入 go.etcd.io/etcd/mvcc/mvccpb 包才能正确使用 mvccpb.PUT 和 mvccpb.DELETE 等常量。
修改代码如下:
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"go.etcd.io/etcd/mvcc/mvccpb" // 引入 mvccpb 包
)
func main() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379"}, // etcd 地址
})
if err != nil {
// 错误处理
}
defer cli.Close() // 关闭连接
watcher := clientv3.NewWatcher(cli)
ch := watcher.Watch(context.Background(), "key")
for resp := range ch {
for _, ev := range resp.Events {
switch ev.Type {
case mvccpb.PUT:
fmt.Printf("PUT: %s %q : %q\n", ev.Kv.Key, ev.Kv.Value, ev.PrevKv.Value)
case mvccpb.DELETE:
fmt.Printf("DELETE: %s : %q\n", ev.Kv.Key, ev.PrevKv.Value)
}
}
}
}
以上代码中,我们加入了 go.etcd.io/etcd/mvcc/mvccpb 包,并在 switch 语句中正确地使用了 mvccpb.PUT 和 mvccpb.DELETE 等常量。




