invalid go version '1.23.3': must match format 1.23
在 Golang 项目中,莫名其妙地出现了代码自动补全失效的问题,而且无法正常编译项目。还以为是因为最近折腾 Zed 代码编辑器把环境搞坏了,换回 VSCode 问题依旧。正当要重新搭开发环境时,发现了 go.mod 文件在代码编辑器中变了红色,go.mod 是记录了 Golang 项目导入的库的文件,很有可能源头就在这上面。
打开 go.mod 文件,发现不管是在 Zed 上还是 VSCode 上,该文件的前两行(module test go 1.23.3)都出现了红色的波浪线。
把鼠标放上去,就出现了这样的错误提示:
invalid go version '1.23.3': must match format 1.23
按照提示把 1.23.3 改成 1.23,执行一下 go mod tidy ,发现会自动把 1.23 变成 1.23.3。
找到之前一直正常开发,且没有在 Zed 编辑器中打开过的项目对比了一下,发现之前一直是有小版本号的,这里突然出现这个报错就有点令人费解。而且该项目除了切换过代码编辑器之外还调整过代码文件的目录,所以一时分不清问题出在哪里。
这种就只能先用排除法,把 Zed 及 VSCode 的配置文件(debug.json、launch.json等)全部从项目目录里面移除,再执行 go mod tidy,报错并没有消失。
难道是因为我就上 Golang 的网站上看一下有没有新版本,电脑上的 go 就生气了?
估计没这么玄,但根据经验,一般这种莫名其妙的问题都有可能是缓存的问题,于是就清空 go mod 的缓存试了一下。
go clean -modcache
还是不行,再试试重启大法!
果然,还是不行。
解决方法
最终还是在 ChatGPT 的提示下知道还有 gopls 的缓存,但这个缓存是可以简单粗暴地直接删除目录的。先把 Zed、VSCode 之前的代码编辑器关掉,免得有影响。
先执行以下命令查看你电脑上的缓存目录路径,因为每个开发环境配置有可能不一样。
go env GOCACHE
以上命令返回的就是你当前电脑上的 go 缓存目录,例如我的电脑返回的是
/Users/test/Library/Caches/go-build
然后就是删目录,Linux 或 macOS 可以通过命令操作,Windows 也可以直接通过资源管理器可视化操作。但要注意的是:我们要删的不是刚才命令返回的结果,而是在它的上一层目录找到 gopls 目录并且删除。
这里以 macOS 为例:
cd /Users/test/Library/Caches
rm -rf ./gopls
把 gopls 删除掉,再回到 go 项目目录中执行一下 go mod tidy,问题就解决了。如果还没解决的朋友,可以试试重新安装一下 gopls:
go install golang.org/x/tools/gopls@latest
我是把删除 gopls 目录、重新安装 gopls 都做了一遍,还顺便把 go 版本升级到了 1.24。
思路拓展
Gopls: The language server for Go。
gopls 是 Golang 官方的开发语言服务器,Zed、VSCode 等代码编辑器的代码自动提示是有可能会调用它的,所以以后遇到代码编辑器代码自动提示出现问题,并且确认工程及代码本身没有问题情况下,可以先尝试从 gopls 上找原因。