二进制包编译
652字约2分钟
2025-02-03
go项目的部署特别简单,编写完成之后,只需要执行go build即可打包为可执行文件
注意,这个操作是不同平台不一样的
windows下打包就是exe文件,linux下打包就是二进制文件
交叉编译
什么是交叉编译呢,就是在windows上,我开发的go程序,我也能打包为linux上的可执行程序
在windows平台,打linux的包
注意,执行set这个命令,一定得要是在cmd的命令行下,powershell是无效的
set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
go build -ldflags "-s -w" -o podInfo podInfo.go
set GOOS=windows
为了方便呢,可以在项目的根目录下写一个.bat文件,然后执行
参数说明
# 下面这命令可以缩小Go编译的二进制程序1/4的大小
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o podInfo podInfo.go
# 在上面编译完成的基础上,进一步压缩二进制包的体积,实际可以再压缩30%的体积,此在centos7下执行:
https://github.com/upx/upx/releases
chmod +x podInfo && upx podInfo
# 编译配置参数解释:
CGO_ENABLED=0:
这个环境变量设置禁用了 CGO 编译。CGO 是 Go 语言的一种特性,用于在 Go 代码中调用 C 代码。这里将其设置为 0 表示禁用 CGO,强制使用纯 Go 代码编译。
GOOS=linux: # linux , darwin, windows
这个环境变量设置目标操作系统为 Linux。这意味着编译出的可执行文件将在 Linux 系统上运行。
GOARCH=amd64:
这个环境变量设置目标处理器架构为 amd64,即 64 位的 x86 处理器架构。这是指定编译生成的可执行文件适用的处理器架构。
go build:
这是 Go 语言的一个命令,用来编译源代码并生成可执行文件。
-ldflags "-s -w":
这个选项用于设置链接时的标志。具体来说,
-s 表示去掉符号表和调试信息,减小可执行文件的尺寸;
-w 表示去掉 DWARF 调试信息,进一步减小可执行文件的尺寸。
-o podInfo:
这个选项指定生成的可执行文件的名称为 podInfo。在当前目录下将生成一个名为 podInfo 的可执行文件,这是编译后的程序。
综合起来,这条命令的目的是使用指定的操作系统和处理器架构编译一个 Go 语言程序,并生成一个在 Linux 上运行的、尽可能精简的可执行文件 podInfo。