目录
1、创建任意项目
go mod init go-test
项目代码内容:
package main
//go.etcd.io/etcd/clientv3重点处理这个包
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"log"
"time"
)
func main() {
// 创建etcd客户端
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379"}, // etcd集群地址
DialTimeout: 5 * time.Second, // 连接超时时间
})
if err != nil {
log.Fatal(err)
}
defer cli.Close()
// 设置键值对
key := "/mykey"
value := "myvalue"
_, err = cli.Put(context.Background(), key, value)
if err != nil {
log.Fatal(err)
}
fmt.Println("Set key:", key, "value:", value)
// 获取键值对
resp, err := cli.Get(context.Background(), key)
if err != nil {
log.Fatal(err)
}
for _, kv := range resp.Kvs {
fmt.Printf("Get key: %s, value: %s\n", string(kv.Key), string(kv.Value))
}
}
之后执行,当然一切的问题也源于下面的导包引发的,也就是go get go.etcd.io/etcd/clientv3 导入的是最新的包,新版本存在某些包的不兼容:
//下载最新的包
go get go.etcd.io/etcd/clientv3
go mod tidy
2、出现异常
在执行go build的时候会报异常,原因主要是etcd中使用的bbolt和grpc版本冲突引起,也就是最新的etcd的版本只支持老的grpc的版本:
go: go-client imports
go.etcd.io/etcd/clientv3 tested by
go.etcd.io/etcd/clientv3.test imports
github.com/coreos/etcd/auth imports
github.com/coreos/etcd/mvcc/backend imports
github.com/coreos/bbolt: github.com/coreos/bbolt@v1.3.8: parsing go.mod:
module declares its path as: go.etcd.io/bbolt
but was required as: github.com/coreos/bbolt
3、处理异常
replace (
github.com/coreos/bbolt v1.3.6 => go.etcd.io/bbolt v1.3.6
google.golang.org/grpc => google.golang.org/grpc v1.26.0
)
之后再执行,问题解决:
go mod tidy