Golang编译器报错但源代码未更改如何解决

Golang编译器报错但源代码未更改如何解决 我有一个Go应用程序,已经稳定运行了几个月,但它突然开始出现编译错误。我没有对项目进行任何更改。直到上周五(5月28日)它还能正常编译,但在6月1日星期二开始出现错误。

错误如下:

k8s.io/klog/klog.go:705:10: invalid operation: logr != nil (mismatched types logr.Logger and nil);

k8s.io/klog/klog.go:919:4: undefined: logr.WithCallDepth

我的源代码没有改变,所以我只能假设某个依赖项发生了变化。我看到在这个问题发生时,该项目发布了一个标记为“重大变更”的新版本(https://github.com/go-logr/logr/releases/tag/v1.0.0-rc1),但我无法弄清楚它如何相关,因为我的项目中的依赖项明确依赖于logr的v0.1.0和v0.2.0版本。

我的go.mod文件指定了:

k8s.io/apimachinery v0.21.1,

这在go.sum文件中产生了以下依赖项(以及其他):

github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/apimachinery v0.20.0 h1:jjzbTJRXk0unNS71L7h3lxGDH/2HPxMPaQY+MjECKL8=
k8s.io/apimachinery v0.20.0/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
k8s.io/apimachinery v0.20.2 h1:hFx6Sbt1oG0n6DZ+g4bFt5f6BoMkOjKWsQFu077M3Vg=
k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=

如果有人能提供关于此问题原因以及如何修复的见解,我将不胜感激。


更多关于Golang编译器报错但源代码未更改如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

这个帖子有更新吗?这个问题导致我无法轻松更新模块,因为“go get -u”命令无法完成。

更多关于Golang编译器报错但源代码未更改如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好 Thomas

我并没有解决这个问题,但我找到了一个变通方案,那就是克隆代码仓库,然后使用 go build 命令来构建它。这样构建没有错误。

谢谢

Alan

你好!

我这里也遇到了相同的编译错误。 最后一次成功编译也是在5月28日。

尝试回退几个版本,但没有成功。

你有什么解决这个问题的线索吗?

以下是我的编译日志:

# k8s.io/klog
../k8s.io/klog/klog.go:705:10: invalid operation: logr != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:724:10: invalid operation: logr != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:742:10: invalid operation: logr != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:763:10: invalid operation: logr != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:782:11: invalid operation: loggr != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:783:3: undefined: logr.WithCallDepth
../k8s.io/klog/klog.go:794:11: invalid operation: loggr != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:795:3: undefined: logr.WithCallDepth
../k8s.io/klog/klog.go:915:9: invalid operation: log != nil (mismatched types logr.Logger and nil)
../k8s.io/klog/klog.go:919:4: undefined: logr.WithCallDepth
../k8s.io/klog/klog.go:919:4: too many errors

这个问题是由于k8s.io/klog依赖的github.com/go-logr/logr版本冲突导致的。k8s.io/klog/v2 v2.4.0版本依赖logr v0.2.0,但你的项目可能间接依赖了logr v1.0.0-rc1,导致API不兼容。

解决方案是清理依赖并锁定logr版本:

// 1. 清理go.sum文件
rm go.sum

// 2. 添加replace指令到go.mod,强制使用logr v0.4.0(与klog/v2兼容的版本)
module your-module-name

go 1.16

replace github.com/go-logr/logr => github.com/go-logr/logr v0.4.0

require (
    k8s.io/apimachinery v0.21.1
    // 其他依赖...
)

// 3. 更新依赖
go mod tidy

// 4. 验证版本
go list -m all | grep logr

如果问题仍然存在,可以尝试更彻底的解决方案:

// 清理整个模块缓存
go clean -modcache

// 删除vendor目录(如果存在)
rm -rf vendor

// 重新下载依赖
go mod download

// 验证编译
go build ./...

对于长期解决方案,建议在go.mod中明确指定logr版本:

require (
    github.com/go-logr/logr v0.4.0
    k8s.io/apimachinery v0.21.1
    k8s.io/klog/v2 v2.4.0
)

然后运行go mod tidy重新整理依赖关系。

回到顶部