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版本切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Golang实现延迟队列(DelayQueue)

    基于Golang实现延迟队列(DelayQueue)

    延迟队列是一种特殊的队列,元素入队时需要指定到期时间(或延迟时间),从队头出队的元素必须是已经到期的。本文将用Golang实现延迟队列,感兴趣的可以了解下
    2022-09-09
  • goland实现自动格式化代码

    goland实现自动格式化代码

    本文介绍了三种在GoLand中自动格式化Go代码的方法:使用FileWatchers在编码过程中自动格式化、利用Git提交工具在提交前自动格式化以及使用快捷键手动格式化,每种方法都有其特点和适用场景
    2025-12-12
  • Go语言应该什么情况使用指针

    Go语言应该什么情况使用指针

    go语言的指针类型和C/C++的指针类型用法是一样的,那么Go语言应该什么情况使用指针,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-07-07
  • golang 的string与[]byte转换方式

    golang 的string与[]byte转换方式

    这篇文章主要介绍了golang 的string与[]byte转换方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言读写锁RWMutex的源码分析

    Go语言读写锁RWMutex的源码分析

    本篇文章我们将一起来学习下Go语言中的读写锁sync.RWMutex。文中的示例讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-10-10
  • golang搭建静态web服务器的实现方法

    golang搭建静态web服务器的实现方法

    这篇文章主要介绍了golang搭建静态web服务器的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 详解Golang中结构体方法的高级应用

    详解Golang中结构体方法的高级应用

    本文旨在深度剖析Go中结构体方法的高级应用。我们不仅会回顾结构体方法的基本概念和用法,还将探讨如何通过高级技巧和最佳实践,希望对大家有所帮助
    2024-01-01
  • Golang 中 return 与 defer关键字实践指南

    Golang 中 return 与 defer关键字实践指南

    本文详细介绍了Go语言中return和defer的关键特性,包括它们的执行顺序、在不同场景下的行为,以及defer的其他重要特性,通过具体代码示例,文章帮助读者理解如何正确使用defer,避免常见的陷阱,从而编写出更健壮和易维护的代码,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • GoLang channel底层代码实现详解

    GoLang channel底层代码实现详解

    Channel和goroutine的结合是Go并发编程的大杀器。而Channel的实际应用也经常让人眼前一亮,通过与select,cancel,timer等结合,它能实现各种各样的功能。接下来,我们就要梳理一下GoLang channel底层代码实现
    2022-10-10
  • 利用Golang解析json数据的方法示例

    利用Golang解析json数据的方法示例

    Go提供了原生的JSON库,并且与语言本身有效的集成在了一起。下面这篇文章将给大家介绍关于利用Golang解析json数据的方法,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07

最新评论