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

2023-11-11 18:04

本文主要是介绍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 环境变量可能会影响其他软件的运行,因此在进行任何更改之前,请确保理解和谨慎操作。

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

/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

这篇关于compile: version “go1.19“ does not match go tool version “go1.18.1“的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/391892

相关文章

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带