golang使用etcd,使用的庫為:
github.com/coreos/etcd/clientv3
或者
go.etcd.io/etcd
這兩個庫其實(shí)都是一樣的
直接說坑所在栋齿,上代碼
package main
import (
"context"
"log"
"time"
"github.com/coreos/etcd/clientv3"
)
func main() {
conf := clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
DialTimeout: 5 * time.Second,
}
client, err := clientv3.New(conf)
if err != nil {
log.Panic(err)
}
defer client.Close()
kv := clientv3.NewKV(client)
lease := clientv3.NewLease(client)
resp, err := lease.Create(context.TODO(), 3)
if err != nil {
log.Println("lease.Create:", err)
return
}
kv.Put(context.TODO(), "stb", "jdy", clientv3.WithLease(clientv3.LeaseID(resp.ID)))
}
出現(xiàn)錯誤
rpc error: code = 1 desc = "context canceled"
注意這里面的一個函數(shù)苗胀,lease.Create,當(dāng)使用租約的時候瓦堵,就出現(xiàn)問題了基协。而且很多資料里面都是使用和原生一樣的grant方法」接茫可是這里只有這么一個create方法澜驮。
查看mod版本以及遠(yuǎn)程v3的版本,果然發(fā)現(xiàn)了問題惋鸥。
image.png
這是本地的版本杂穷,直接使用了 go get github.com/coreos/etcd/clientv3
或者
go get go.etcd.io/etcd
他這里默認(rèn)拉取的是2.3.8,但是看一下遠(yuǎn)程的地址
https://pkg.go.dev/go.etcd.io/etcd@v2.3.8+incompatible/clientv3?tab=versions
版本已經(jīng)到了3以上卦绣,這個差距太大了吧
試著換成最新的版本
go get github.com/coreos/etcd/clientv3@v3.3.25
出現(xiàn)以下錯誤
image.png
解決辦法就是換一下grpc的版本耐量,資料來源:https://github.com/etcd-io/etcd/issues/11931
執(zhí)行:go get google.golang.org/grpc@v1.26.0
這時候,再去看執(zhí)行租約的代碼
已經(jīng)是正常我們熟悉的原生函數(shù)名稱了
再次執(zhí)行代碼滤港,成功
image.png
總結(jié):
1.不要直接使用go get去獲取這個包廊蜒,要加上最新的版本號,不然拉取的是很老的版本
2.grpc的版本使用1.26.0,詳細(xì)的去看上述那個issues里面的討論