前言
首先Go本身在交叉编译方法十分强大,这里就不再赘述了,有需要的同学可以参考《Golang交叉编译各个平台的二进制文件》。虽然自带的交叉编译已足够强大,并且能满足大部分的使用场景,但还是有一个坑人的地方就是当源代码中包含CGO代码时,默认交叉编译就会出错,具体可以参考《CGO_ENABLED环境变量对Go静态编译机制的影响》。实际上有一种可以一劳永逸地解决,并保证线下编译与线上部署环境一致的项目构建方法,那就是基于Docker的“交叉编译方案”。
Docker是近年来十分流行的Linux容器化技术,相比传统的虚拟机技术,其占用的系统资源更小,体积小,启动速度也非常迅捷。同时Docker已经能在主流操作系统Windows, macOS和Linux上得到快速的构建,这一点对本文接下来要讲的交叉编译十分重要。有关容器的详细介绍具体可参考docker入门教程,其安装方法也非常简单。
方法
准备一个基础镜像
为了保证一次编译,到处运行的效果(有点类似JAVA虚拟机),因此需要采用同一个Docker基础镜像分别用于代码编译和部署的工作,本文基于D