解决 Golang Toolchain 问题

Golang Toolchain 问题

1、问题描述

当本地服务使用的 Golang 版本为 1.20,但是依赖的服务或者第三方库使用的 Golang 版本 >= 1.21(比如是 1.22.6),执行 go mod tidy以后,在 go.mod文件中就会出现 toolchain 1.22.6 这行文字。同时也会报错

unknown directive: toolchain,导致项目无法编译和执行。

2、问题原因

出现上述问题的原因是 Golang 的向前兼容版本特性改变导致的。在 1.21 以前的版本编译的时候不会强制检查依赖项和本身项目使用的 Golang 版本,也就意味着你可以使用 Golang1.19 来编译 Golang1.20 的代码,前提是没有用到 1.20 的特性。但是当升级到Golang1.21 版本以后,就会强制检查依赖项和本身项目使用的 Golang 版本,取最小值或者能够编译项目的最小最合适 Golang 版本来进行编译,如果无法编译则会自动下载合适版本(下载路径为 Gopath/pkg/mod/golang.org)然后进行编译。然后就会出现上述问题。

3、解决方案

上述问题可以使用策略来解决。在 Golang1.21 版本及以后版本添加了新的配置变量 GOTOOLCHAIN,默认为GOTOOLCHAIN='auto',会自动寻找合适版本去编译代码,可以将其配置为GOTOOLCHAIN='local',还是用我们本地的编译工具链来进行编译即可。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!