编译部署
前言
本文将引导你完成Go项目的编译与部署,如果您只想知道怎么做,请跳转到总结。
第一步:编译
1. Go 编译命令
go build
默认情况下,go build 会根据当前的操作系统和架构生成适用于本机的静态链接的二进制文件,即 所有依赖(包括 Go 标准库)都会打包到同一个可执行文件中,这样做的好处是部署时无需担心依赖库的缺失。
动态编译与静态编译的区别在于,动态编译的二进制文件需要在运行时加载依赖库,而静态编译的二进制文件则包含所有的依赖,确保了程序的可移植性。
2. 静态编译
CGO_ENABLED=0 go build
3. 动态编译
CGO_ENABLED=1 go build
4. 强制动态编译
CGO_ENABLED=1 go build -ldflags '-linkmode=external -extldflags "-shared"'
5. 交叉编译
Go 语言的跨平台能力是其优势之一。Go 原生支持交叉编译,你可以在一个平台上编译适用于不同操作系统和架构的可执行文件。
通过设置环境变量 GOOS 和 GOARCH,可以实现交叉编译:
# 为 Linux 平台编译
GOOS=linux GOARCH=amd64 go build
# 为 Windows 平台编译
GOOS=windows GOARCH=amd64 go build
常见的 GOOS 取值包括:windows, linux, darwin(macOS);GOARCH 则对应 amd64, 386, arm 等架构。
6. 编译优化
Go 编译器提供了一些选项来优化生成的二进制文件:
-
-ldflags:用于链接时传递标志,可以用来减少二进制文件的大小,例如通过去除符号表和调试信息:go build -ldflags="-s -w" -
-trimpath:用于移除构建过程中生成的路径信息,以减少信息泄露:go build -trimpath
这些选项可以在编译阶段对二进制文件进行优化,从而减少大小并提高运行效率。