golang版本切换的实现

 更新时间:2026年05月21日 09:17:25   作者:冰糖拌面  
本文主要介绍了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版本切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言实现生成样式美观的PDF文件

    Go语言实现生成样式美观的PDF文件

    使用 Go 语言生成样式美观的 PDF 文件是一个常见的需求,尤其是在报告生成、发票、合同等场景中,下面就跟随小编一起来学习一下具体实现方法吧
    2025-01-01
  • 详解golang中Context超时控制与原理

    详解golang中Context超时控制与原理

    Context本身的含义是上下文,我们可以理解为它内部携带了超时信息、退出信号,以及其他一些上下文相关的值,本文给大家详细介绍了golang中Context超时控制与原理,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-01-01
  • 使用systemd部署和守护golang应用程序的操作方法

    使用systemd部署和守护golang应用程序的操作方法

    systemd是一个流行的守护进程管理器,可以轻松管理服务的启动、停止、重启等操作,让我们的应用程序始终保持在线,本文介绍了如何使用systemd部署和守护golang应用程序,感兴趣的朋友一起看看吧
    2023-10-10
  • 解析golang 标准库template的代码生成方法

    解析golang 标准库template的代码生成方法

    这个项目的自动生成代码都是基于 golang 的标准库 template 的,所以这篇文章也算是对使用 template 库的一次总结,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-11-11
  • gin框架Context如何获取Get Query Param函数数据

    gin框架Context如何获取Get Query Param函数数据

    这篇文章主要为大家介绍了gin框架Context Get Query Param函数获取数据,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go 项目目录布局保姆级教程

    Go 项目目录布局保姆级教程

    这篇文章主要为大家介绍了Go 项目目录布局保姆级教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • go等待一组协程结束的操作方式

    go等待一组协程结束的操作方式

    这篇文章主要介绍了go等待一组协程结束的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Golang 中的 unsafe.Pointer 和 uintptr详解

    Golang 中的 unsafe.Pointer 和 uintptr详解

    这篇文章主要介绍了Golang中的unsafe.Pointer和uintptr详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • golang 使用chromedp获取页面请求日志network

    golang 使用chromedp获取页面请求日志network

    这篇文章主要为大家介绍了golang 使用chromedp获取页面请求日志network方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Go语言并发控制之semaphore的原理与使用

    Go语言并发控制之semaphore的原理与使用

    这篇文章主要为大家详细介绍了Go官方库x中提供的扩展并发原语 semaphore,译为“信号量”,文中介绍了它的原理与使用,需要的可以了解下
    2025-02-02

最新评论