报错如下:

no required module provides package go.etcd.io/etcd/clientv3; to add it:
go get go.etcd.io/etcd/clientv3

或者:

undefined: resolver.ResolveNowOption

再或者:

module declares its path as: go.etcd.io/bbolt
but was required as: github.com/coreos/bbolt

关于etcd安装使用遇到的坑

先说解决方法(有两点):

  1. 确保etcd客户端成功get到。命令行下载命令:

【百度给的下载命令是 go get go.etcd.io/etcd/clientv3。这是错的,md。。】

go get go.etcd.io/etcd/client

不用指明版本,会安装所有版本,不信去看源码包,地址

  1. 确保正确的引入
import (clientV3 "go.etcd.io/etcd/client/v3")

给v3起个别名,用别名去获取包下的类和方法

即可,代码剩下的只要代码没问题就行。结束

正确的关键代码

package main

import (
	"fmt"
	"time"

	clientv3 "go.etcd.io/etcd/client/v3"
)

func main() {
	cli, err := clientv3.New(clientv3.Config{
		Endpoints:   []string{"127.0.0.1:2379"},
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
		panic(err)
	}
	fmt.Println("etcd boot success")
	defer cli.Close()
}

问题的反思:

顺着报错去百度上找了相关的回答,确实挺相关的,但是在我这边无效。作者不知道是否真的泡通了。直到我去看了官方的文档的示例才发现不对。我是跟着网上视频教程来的,当然教程有点久远了好像19年的。

  1. 如果代码确定写的没问题,最好可以找找官发文档,尝试发现原因
  2. 熟悉语言基础特性。如果我很懂go包管理和代码风格的话也能找到问题了,一开始有下载成功客户端,但是编辑器也有提示引入错误了,如果我能跑去打开看下源码文件,源码包看到文件名或许就发现问题了,明显client下是还有文件夹的,引入的深度不对
  3. it更新换代快,年代久的教程谨慎入手
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐