当前位置: 首页 > news >正文

compile: version “go1.19“ does not match go tool version “go1.18.1“

在这里插入图片描述

**

1 安装了新版本的go后 为什么go version 还是旧版本?

**

如果你已经按照上述步骤安装了新版本的 Go,但 go version 命令仍然显示旧版本,可能是因为你的环境变量设置不正确或未正确生效。你可以尝试以下方法来解决问题:

重新加载配置文件:运行以下命令以重新加载你的 shell 配置文件,使更改生效:

source ~/.bash_profile   # 或者使用相应的配置文件,如 ~/.bashrc 或 ~/.zshrc

确保在终端中运行该命令后,你的配置文件中的新 Go 版本的环境变量设置已正确加载。

检查环境变量设置:运行以下命令来检查当前的 Go 环境变量设置:

go env

确认输出中的 GOROOTPATH 是否指向你安装的新版本的 Go。

检查路径优先级:在终端中运行以下命令,查看系统在终端中搜索可执行文件时的路径优先级:

echo $PATH

确认新版本的 Go 所在路径在 $PATH 中的位置是否在旧版本之前。如果不在正确的位置,你可以编辑你的 shell 配置文件,将新版本的 Go 路径添加到 $PATH 变量的前面。

例如,在 ~/.bash_profile~/.bashrc 中添加以下行:

````shell
export PATH=/path/to/new/go/bin:$PATH

/path/to/new/go 替换为你安装的新版本 Go 的路径。

检查安装目录:确保你安装的新版本的 Go 在正确的目录下。默认情况下,新版本的 Go 应该被安装到 /usr/local/go 目录下。

如果以上步骤都没有解决问题,可能还有其他因素导致旧版本的 Go 仍然被使用。你可以尝试重新启动终端或计算机,以确保环境变量和配置的正确加载。如果问题仍然存在,建议卸载旧版本的 Go,并重新按照正确的步骤安装新版本的 Go。

请确保在更改或卸载任何软件之前备份重要的文件,并谨慎操作。


如果你已经确认 GOROOT 和 PATH 环境变量都正确指向了新版本的 Go,但 go version 仍然显示旧版本,可能是因为系统中存在多个 go 可执行文件,而旧版本的 go 在路径中的优先级更高。

你可以尝试以下方法来解决这个问题:

指定完整路径运行 go:在终端中,使用新版本 Go 的完整路径运行 go 命令。例如,假设新版本 Go 的路径为 /usr/local/go/bin/go,则在终端中运行以下命令:

/usr/local/go/bin/go version

如果显示的是新版本的 Go,说明新版本已正确安装并可用。这表明问题可能是由于旧版本的 go 仍在系统中的其他路径中。

搜索其他 go 可执行文件:在终端中运行以下命令,搜索系统中的所有 go 可执行文件:

which -a go

这将列出所有系统中找到的 go 可执行文件的路径。检查输出中是否有其他版本的 go,并注意它们在路径中的位置。

删除旧版本的 go:如果你确定找到了旧版本的 go,可以考虑将其删除或重命名,以便新版本的 go 在路径中优先使用。

注意:在执行此操作之前,请确保备份旧版本的 go 或确认你不再需要它。

检查系统的 PATH 顺序:检查系统中的 PATH 环境变量的顺序,确保新版本的 Go 所在路径在旧版本之前。你可以编辑你的 shell 配置文件,将新版本的 Go 路径添加到 $PATH 变量的前面。

例如,在 ~/.bash_profile 或 ~/.bashrc 中添加以下行:

export PATH=/usr/local/go/bin:$PATH

如果你已经在正确的位置设置了新版本的 Go 路径,可以尝试重新加载配置文件,然后再次验证 go version
如果以上方法仍然没有解决问题,可能需要进行更进一步的调查和排查。你可以尝试在 Go 官方论坛或其他相关社区寻求帮助,或者尝试重新安装新版本的 Go。

**

2 homebrew 卸载go

**

如果你使用 Homebrew 安装了 Go,并希望卸载它,可以按照以下步骤进行操作:

打开终端:打开终端应用程序。

检查 Go 安装:运行以下命令,检查是否已通过 Homebrew 安装了 Go:

brew list

如果在列表中看到与 Go 相关的包(如 gogolang),则表示 Go 已通过 Homebrew 安装。

卸载 Go:运行以下命令,使用 Homebrew 卸载 Go:

brew uninstall go

这将卸载 Go 及其关联的包和文件。检查残留文件:运行以下命令,检查是否还有残留的 Go 文件:shell
复制
which go

如果输出显示 /usr/local/bin/go 或其他 Go 可执行文件的路径,表示仍然存在残留文件。

删除残留文件:如果发现有残留文件,请使用以下命令删除它们(确保谨慎操作):

sudo rm -rf /usr/local/go

这将删除 Go 安装目录。验证卸载:运行以下命令验证 Go 是否已成功卸载:
go version

如果提示找不到 go 命令或显示其他错误信息,则表示 Go 已成功卸载。
通过按照上述步骤,你可以使用 Homebrew 卸载 Go。请注意,在卸载 Go 之前,确保备份你的重要文件和项目,并谨慎操作以避免意外删除其他文件。

3 homebrew 中的go version优先级 为什么比 系统中的go高?

在使用 Homebrew 安装 Go 时,Homebrew 会将 Go 安装到 Homebrew 的管理路径下,例如 /usr/local/Cellar/go 目录。当你在终端中运行 go version 命令时,系统会按照特定的搜索顺序查找可执行文件,而这个搜索顺序决定了哪个路径中的 go 可执行文件被优先使用。

默认情况下,终端会按照 $PATH 环境变量中的路径顺序搜索可执行文件。而在 Homebrew 安装的软件中,Homebrew 会将其管理的软件路径添加到 $PATH 的前面。因此,当你使用 Homebrew 安装 Go 后,Homebrew 的路径会在系统路径之前,从而使 Homebrew 中安装的 Go 版本优先生效。

这样设计的目的是为了避免与系统自带的软件冲突,并允许用户在不影响系统的情况下独立管理软件版本。Homebrew 通过将软件安装到自己的目录中,并调整 $PATH 环境变量的顺序,确保在终端中优先使用 Homebrew 中安装的软件版本。

如果你希望系统中的 Go 版本优先生效,可以考虑手动调整 $PATH 环境变量的顺序,将系统路径放在 Homebrew 路径之前。这样,在终端中运行 go version 时,系统中的 go 可执行文件将被优先使用。

请注意,更改 $PATH 环境变量可能会影响其他软件的运行,因此在进行任何更改之前,请确保理解和谨慎操作。

这里我的PATH:
在这里插入图片描述
可以看到homebrew的是排在/usr/local/go之前的,怪不得就算装了新版本在/usr/local ,查看go version 还是 旧版本,这里把homebrew的删了吧就行了。

本来:
在这里插入图片描述
后来

/opt/homebrew/bin  on stable *1  brew uninstall go            ok  at 13:39:10 
Uninstalling /opt/homebrew/Cellar/go/1.18.1... (11,964 files, 595.3MB)/opt/homebrew/bin  on stable *1  which go                     ok  at 13:39:41 
/usr/local/bin/go/opt/homebrew/bin  on stable *1  which -a go                  ok  at 13:39:54 
/usr/local/bin/go
/usr/local/go/bin/go/opt/homebrew/bin  on stable *1  go version                   ok  at 13:39:59 
go version go1.19 darwin/arm64

相关文章:

  • 【狂神说Java】Nginx详解
  • Nacos热更新
  • 学习c#的第四天
  • 深度解剖Linux权限的概念
  • 关于session的不断变化问题
  • Python:使用marshmallow实现Python数据序列化、反序列化、数据验证
  • 智能一体化管网水位监测仪怎么样?
  • Wireshark抓包(网络分析)工具
  • 机器学习——朴素贝叶斯
  • 利用 Google Artifact Repository 构建docker 镜像仓库
  • C语言左移与右移学习
  • 由浅入深学习统计学 - 常用统计图形学习
  • Stream流的groupingBy
  • 100天精通风控建模(原理+Python实现)——第3天:风控建模中如何处理缺失值?
  • 如何有效的保护Windows登录 安当加密
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Android优雅地处理按钮重复点击
  • java8-模拟hadoop
  • Linux后台研发超实用命令总结
  • Object.assign方法不能实现深复制
  • Spring框架之我见(三)——IOC、AOP
  • Zepto.js源码学习之二
  • 成为一名优秀的Developer的书单
  • 动态规划入门(以爬楼梯为例)
  • 浮动相关
  • 漂亮刷新控件-iOS
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Unity中实现一个简单的消息管理器
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #pragam once 和 #ifndef 预编译头
  • #微信小程序(布局、渲染层基础知识)
  • (C)一些题4
  • (C语言)共用体union的用法举例
  • (独孤九剑)--文件系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (排序详解之 堆排序)
  • (转)shell调试方法
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net 流——流的类型体系简单介绍
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /etc/motd and /etc/issue
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [C/C++]数据结构 堆的详解
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [git]git命令如何取消先前的配置
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • [NOIP2017 提高组] 列队 题解
  • [NSSCTF]-Web:[SWPUCTF 2021 新生赛]easyrce解析