Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > golang版本切换

golang版本切换的实现

作者:冰糖拌面

本文主要介绍了golang版本切换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

这里针对mod项目,centos环境

事情是由于某些原因我要升级我的golang从1.20.X升级到1.21.X

我的一个目录A安装了1.20(我本人习惯把GOROOT、GOPATH、GOMODCACHE 都放在这个大目录A下),我没想删除它,留着了,在~/.bashrc(centos)配置里写了类似这样

export GOROOT=/A/goroot
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN

go env的 GOMODCACHE=/A/cache_dir,这个是用来存放所有下载的go依赖包的地方

然后我要升级嘛,我选择了1.21.13,然后 把上面说的那些东西放在了/B下,然后我就要去改~/.bashrc

export GOROOT=/B/goroot
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN

go mod tidy 就会报错

compile: version "go1.20.14" does not match go tool version "go1.21.13"

然后执行了下面

go mod edit -go=1.21.13

依然会报错

github.com/prometheus/client_golang/prometheus imports
        google.golang.org/protobuf/types/known/timestamppb tested by
        google.golang.org/protobuf/types/known/timestamppb.test imports
        github.com/google/go-cmp/cmp/cmpopts: github.com/google/go-cmp@v0.5.7: verifying go.mod: missing GOSUMDB

这样的错误,然后我就调研了一下,go mod tidy会做以下事情

- 扫描项目中的所有 .go 文件
- 解析 import 语句
- **检查代码语法**(需要知道 Go 版本)
- 根据 go.mod 中的 Go 版本决定支持哪些语言特性
- 添加缺失的依赖,移除不需要的依赖

所以,需要清除这些依赖重新下载,当然我不想清除,以后还得用可能,留着了,就在/B下面建立一个新的cache_dir然后

go env -w GOMODCACHE="/B/cache_dir"

然后go mod tidy 解决问题

然后期间呢,还遇到了点小麻烦,是关于编辑器的,我用的VSCode

在workspcae settings中我设置了

{
    "go.goroot": "/A/go",
    "go.alternateTools": {},
    "go.toolsManagement.go": "/A/go/bin/go"
}

所以我即便更改了~/.bashrc,在vscode中开启的终端,仍然是1.20版本,vscode也要跟着一起改哦

最后,很显然,这个更新过程很让人烦躁,而且我感觉只更改了GOMODCACHE仍然会有一些我没遇到的坑,我也相信go的设计不会让版本切换这么难为人,经调研发现了gvm工具,下一篇说

到此这篇关于golang版本切换的实现的文章就介绍到这了,更多相关golang版本切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文