一篇有情绪的 go troubleshooting guide

Posted 乱舞春秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇有情绪的 go troubleshooting guide相关的知识,希望对你有一定的参考价值。


1. 安装 Go

1.1 yum 安装

yum install go

注意 yum 安装会安装最新版的 go,需要指定版本安装可通过源代码(实际是 tar 包通过 installer)安装。当然,yum 应该也是能指定版本安装。

1.2 installer 安装

参考 Download and install
下载包:https://go.dev/dl/

2. invalid version: unknown revision

2.1 现象及解决方法

go run cmd/main.go 时报错:

[root@chunqiu go]# go run svc/chunqiu/cmd/chunqiu/main.go
vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go:21:2: cannot find package "." in:
        /home/chunqiu/go/src/AANM/go/vendor/io/fs

查看项目 go.mod 文件发现是 go.mod 文件定义版本(1.16) 和当前 go version 版本(1.15.15) 不一致。于是删掉 go.mod 文件,重新 go mod init <project_name>,执行 go mod tidy 报错:

go: github.com/hashicorp/vault@v1.9.1 requires
        github.com/hashicorp/vault/api/auth/approle@v0.0.0-00010101000000-000000000000: invalid version: unknown revision 000000000000

查阅文档发现 go mod tidy 调用的是 go get,接着调用的是 git 下载 github 的包。于是使用 go get 命令手动下载 vault:

go get -u github.com/hashicorp/vault

报错:

ssh:connect to host github.com port 22: Connection timed out.

ssh 连接的报错,有可能 port 端口不是 22,也有可能是别的原因,这里并未深究,将下载方式从 ssh 切换到 https:

git config --global url.git@github.com:.insteadOf https://github.com/

接着执行 go get 手动下载 go: github.com/hashicorp/vault 继续报错:

Permission denied (publickey).
fatal: Could not read from remote repository.

提示 Permission denied,将 public key 添加到 github 上,继续执行 go get -u,继续报错:

go: github.com/hashicorp/vault@v1.9.1 requires
        github.com/hashicorp/vault/api/auth/approle@v0.0.0-00010101000000-000000000000: invalid version: unknown revision 000000000000

心中一万个xxx 翻过,怎么又回到这了。好吧,看来路走错了,接着搜文档,发现和之前把 go.mod 删掉有关系。之前的 go.mod 中有 replace 字段定义包版本的行为,现在新建的包并没有 replace,也没有 require。

将之前包版本的 require 复制到当前 go.mod(只复制了 require 并未复制 replace),接着执行 go mod tidy,下载完成。此时已经泪流满面了...

3. cannot find package "." in:*******

下好了包,开始执行 go run cmd/main.go 又又又报错了:

[root@chunqiu go]# go run svc/chunqiu/cmd/chunqiu/main.go
vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/metrics.go:21:2: cannot find package "." in:
        /home/chunqiu/go/src/AANM/go/vendor/io/fs

还是原来那个错... 好吧,我忍... 对电脑发火不值当...

接着查阅文档发现是 GOPATH 包路径不对,当前执行路径是:

[root@chunqiu go]# pwd
/home/chunqiu/vsWorkspace/dev/go

// GOPATH 路径
[root@chunqiu ~]# go env | grep -i path
GOPATH="/root/go"

于是按照文档要求将代码复制到 GOPATH 路径下,挫是挫了点,但是此刻能运行已经什么都不在乎了。接着执行,还是报一样的错,这...

冷静思考一番,还是从开始的 go.mod 入手,开始的 go.mod 定义了 go 版本是 1.16 这里我们换了版本出现了这一系列问题,会不会是 go 版本的问题呢?于是,将 go 版本从 1.15 换到 1.16,接着执行 go run cmd/main.go 执行成功... 啊,苍天不负我啊...


芝兰生于空谷,不以无人而不芳。

以上是关于一篇有情绪的 go troubleshooting guide的主要内容,如果未能解决你的问题,请参考以下文章

从简历筛选看怎么写一篇有亮点的简历

Sketch | 一篇有态度的汽车手绘图,表现光影色彩的最佳之选

vue基础(上篇)

ARTS第四周

ARTS第十周

ARTS第八周