一篇有情绪的 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的主要内容,如果未能解决你的问题,请参考以下文章