Go的env和bashrc的GOROOT配置不同

初学go遇到的问题,希望对各位初学者有所帮助~

问题描述

我下载了1.22.0版本的go,在bashrc中添加:

复制代码
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOPROXY=https://goproxy.cn,direct
export GO111MODULE=on
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

在Goland编译器中的setting中为GOROOT选择了1.22.0版本的SDK。就正常开始开发项目,在项目目录下执行go,可能是其他包需要更高版本的go,系统自动下载了go download 1.25.3的版本。

然后我发现 go env 和 bashrc配置出现了不一致,bashrc的GOROOT=/usr/local/go,go env的GOROOT:

bash 复制代码
~/workspace/Project1204/backend/customer$ go env GOROOT
/home/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.3.linux-amd64

我希望想要它们处于相同的版本,我去手动修改go.mod的go版本为1.22.0,但是修改完编译器会自动帮我升级,然后重置我的go.mod的go版本为1.25.3。

问题原因

1.为什么编译器的go版本会自动升级

因为当前的go版本不满足一些包的版本要求,需要更新go版本。

2.为什么明明装了go,在项目目录中执行go却还要重新下载

go识别出了这是一个go项目,这个项目里有一个go.mod文件,里面说明了这个项目使用的go版本,所以为了适配,会自动下载该版本的go。

解决方法:自己下载对应版本的go,或者把go.mod中的go版本改为自己已经安装的go版本。

2.为什么bashrc和go env的GOROOT不一致

go 1.21之后, mod文件中, "go"指令指的是项目要求的最低golang版本, "toolchain"指令是显式指定编译时使用的工具链版本.

优先级:toolchain指令 > go指令 > 本地安装版本

  • 当mod文件中, 存在"toolchain"指令时, 优先使用其版本作为目标"toolchain"版本, 若不存在, 则隐式使用"go"指令版本作为目标"toolchain"版本.
  • 当目标"toolchain"版本与本地版本一致时, 则直接使用本地的"toolchain"来编译.
  • 当目标"toolchain"版本高于本地版本时, 则会自动下载并缓存相应的"toolchain"副本(存放目录是:$GOPATH/pkg/mod/cache/download/golang.org/toolchain/), 然后用这个缓存副本去编译。

因此虽然我系统安装的Go: /usr/local/go (1.22.0版本),

但实际使用的Go:/home/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.3.linux-amd64 (1.25.3版本)

问题解决

最终办法就是,下载一个满足各个包版本要求的版本v1的go,在项目的go.mod中,指定这个版本v1,此时再执行go env $ROOT,就会找到这个v1版本的go,而不是toolchain...的go。

复制代码
~/workspace/Project1204/backend/customer$ go version
go version go1.25.3 linux/amd64

参考:为什么明明装了go,在项目目录中执行go却还要重新下载 go安装第三方库时改变了mod文件的go版本和toolchain版本

相关推荐
BestOrNothing_20151 天前
(2)联想拯救者安装 Ubuntu 双系统前的 BIOS 设置全过程
linux·bios·拯救者·ubuntu22.04·联想lenovo
小王不爱笑1321 天前
IO 模型
开发语言·python
23.1 天前
【Linux】grep命令终极指南
linux
巨斧空间掌门1 天前
JDK17 下载 windows Linux
linux·运维·服务器
知我Deja_Vu1 天前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
AI+程序员在路上1 天前
CANopen 协议:介绍、调试命令与应用
linux·c语言·开发语言·网络
2401_831824961 天前
基于C++的区块链实现
开发语言·c++·算法
m0_518019481 天前
C++与机器学习框架
开发语言·c++·算法
learndiary1 天前
2026.03.12~2026.03.19制作的共7个视频及简介
linux·视频·学习日记小店
ZTLJQ1 天前
深入理解逻辑回归:从数学原理到实战应用
开发语言·python·机器学习