问题背景
开篇中依赖环境 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+incompatible的tag版本,这里我进行替换成了:v20.10.13+incompatible.
为什么要用
v20.10.13+incompatible这个版本呢? 原因:最初因为用的是golang 1.16.15的版本,这个版本无法使用最新版的v24的Docker engine,所以我根据Docker官网发布的releases记录,知道v20.10.13的版本支持Golang 1.16的版本,故在升级Golang 1.21时并没有升级最新版本,因为也可以使用。
结束语
通过这次包指定需要 Golang 1.17 以上的版本,得出,开发项目最好选用 1.18 、1.19 的 Golang 版本.