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信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

Go Select的实现

select语法总结 select对应的每个case如果有已经准备好的case 则进行chan读写操作;若没有则执行defualt语句;若都没有则阻塞当前goroutine,直到某个chan准备好可读或可写,完成对应的case后退出。 Select的内存布局 了解chanel的实现后对select的语法有个疑问,select如何实现多路复用的,为什么没有在第一个channel操作时阻塞 从而导

Go Channel的实现

channel作为goroutine间通信和同步的重要途径,是Go runtime层实现CSP并发模型重要的成员。在不理解底层实现时,经常在使用中对channe相关语法的表现感到疑惑,尤其是select case的行为。因此在了解channel的应用前先看一眼channel的实现。 Channel内存布局 channel是go的内置类型,它可以被存储到变量中,可以作为函数的参数或返回值,它在r