「容器管理系统」 2. 版本问题记录

354 阅读1分钟

问题背景

开篇中依赖环境 Golang 版本为:1.16.15,当时在写单元测试时是可以正常运行的,因为单元测试只测试 Docker 包的版本是否可以正常调用,但是在该版本引入 gin 包时,出现了:

../../go/pkg/mod/github.com/docker/docker@v20.10.13+incompatible/client/container_create.go:8:2: //go:build comment without // +build comment

解决方案

必应网站查询问题原因,可能是 go 的版本 是低于 1.17 版本 导致出现的问题,go 引入的依赖库包中 1.17 版本后 引入了新的构建标记语法导致的兼容问题.

当时没有想着要更新版本:因为有其他项目在 1.16 之前的版本引入 gin 包可以正常使用,我当时就想:我参考降低 gin 版本,切换之后:

build github.com/hdm/thing: cannot load github.com/ugorji/go/codec: ambiguous import: found github.com/ugorji/go/codec in multiple modules:
        github.com/ugorji/go v1.1.4 (C:\Users\Developer\go\pkg\mod\github.com\ugorji\go@v1.1.4\codec)
        github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43 (C:\Users\Developer\go\pkg\mod\github.com\ugorji\go\codec@v0.0.0-20190204201341-e444a5086c43

既然降低包版本不行,那就还是只能升级 golang 版本了,在这里我并没有升级 1.17 的版本,直接升级了最新的 1.21 的版本。

果然,升级之后,go mod tidy 最新的包版本,直接运行,BINGO,成功!

这里插一句:Docker 包版本在 1.16 的版本默认引入的 v23.0.3+incompatibletag 版本,这里我进行替换成了:v20.10.13+incompatible.

为什么要用 v20.10.13+incompatible 这个版本呢? 原因:最初因为用的是 golang 1.16.15 的版本,这个版本无法使用最新版的 v24Docker engine,所以我根据 Docker 官网发布的 releases 记录,知道 v20.10.13 的版本支持 Golang 1.16 的版本,故在升级 Golang 1.21 时并没有升级最新版本,因为也可以使用。

结束语

通过这次包指定需要 Golang 1.17 以上的版本,得出,开发项目最好选用 1.18 、1.19Golang 版本.

参考