如何解决go run main.go 将 go 模块更改为旧版本
我正在使用 github.com/go-chi/jwtauth v1.2.0
,但是一旦我运行我的 main.go
,我的 go.mod
就会将库版本更改为 github.com/go-chi/jwtauth v4.0.3+incompatible
,这是一个较旧的版本并且没有我需要的功能。我尝试在 go.mod
文件中手动更改版本,并为我更新库,但是一旦我运行命令 go run main.go
,它就会恢复到旧版本。为什么会发生这种情况,我该如何解决这个问题?
谢谢。
解决方法
您可以使用 -mod=readonly
要求 Go 工具不要触摸您的 go.mod
。事实上,这是 Go 1.16 的默认情况,所以我建议你升级。
[FWIW,v4.0.3 版听起来比 v1.2.0 版更新]
,这是因为模块作者将模块升级为正式支持Go模块(即go mod
)。要做到这一点并保持相同的 URL,他们必须将模块版本设置为 1.x
。因此,go mod
认为 4.x
晚于 1.x
而实际上并非如此(认为更大的数字晚是合理的)。
某些模块作者创建了一个新版本,例如 v5
,但这会更改从中获取模块的 URL。一些作者对此表示同意,其他作者则不这么认为。
在 Go 1.16 中,可以retract
以前版本的模块 - 这是 go.mod
文件中的一个标记,告诉 go 不要使用该版本。一些作者可能会这样做。
希望这能解释一些模块作者正在改变的原因和方式。在这种情况下,它不能完全解决您的问题,但 -mod=readonly
有效。
FWIW,这里的模块作者现在已经创建了 v5.x
,所以这个特定模块不会存在这个问题。
go mod tidy
确保 go.mod 文件与模块中的源代码匹配。它添加了构建当前模块的包和依赖项所需的任何缺失的模块要求,并删除了对不提供任何相关包的模块的要求。它还向 go.sum 添加任何缺失的条目并删除不必要的条目。
Go Modules Reference
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。