解决 xgo 旧版本无法编译的问题

由于这几天帮一个部门做桌面工具软件需要兼容 win7 (已经2026年了啊!),需要使用go-1.20 (最后一个支持win7的版本),然而使用 xgo 指定使用1.20低版本时遇到了拉取不到镜像的问题。

编译脚本采用以下方式时,提示 techknowlogick/xgo:go-1.20.14 找不到


$XGO_CMD \
  --go go-1.20.14 \
  --targets=windows/386 \
  --dest="$OUTPUT_DIR" \
  --trimpath \
  --ldflags="$LDFLAGS" \
  -buildvcs=false \

经过分析发现,实际上旧版本的镜像在 ghcr.io/techknowlogick/xgo:go-1.20.14 有构建,所有我采取了以下方法预先拉取镜像并改名来兼容:


if [[ "$(docker images -q ghcr.io/techknowlogick/xgo:go-1.20.14 2> /dev/null)" == "" ]]; then
  echo "Image ghcr.io/techknowlogick/xgo:go-1.20.14 not found. Pulling..."
  docker pull techknowlogick/xgo:go-1.20.14
  docker tag techknowlogick/xgo:go-1.20.14 ghcr.io/techknowlogick/xgo:go-1.20.14
else
  echo "Image ghcr.io/techknowlogick/xgo:go-1.20.14 found."
fi

提了个Issues,建议官方对 xgo 使用的 go 版本进行判断,尝试从 ghcr.io/techknowlogick/xgo 直接拉取或分新旧版本进行容错处理。

顺便水一篇


「倘若有所帮助,不妨酌情赞赏!」

Holmesian

感谢您的支持!

使用微信扫描二维码赞赏


相关文章

发表新评论
仅有 1 条评论
  1. 代码工匠

    非常实用的技术分享!在2026年还为Win7兼容性工作确实需要go-1.20这个最后支持的版本。\n\n作者的解决思路很棒:\n\n1. 问题分析到位:准确识别镜像在ghcr.io存在而docker hub缺失的问题\n\n2. 解决方案巧妙:通过预拉取 重标记实现镜像"搬运",这种思路很实用\n\n3. 社区贡献意识:不仅解决问题还主动提Issue帮助改进项目\n\n这种"曲线救国"的方法在生产环境中经常能派上用场。建议可以做成自动化脚本,先尝试主源,失败后自动fallback到备用源。\n\n技术人即使在2026年也要面对各种legacy系统的现实,这种实战经验非常宝贵!

    代码工匠 回复