大家好我是小西,从今天开始,我将开始更新Go基础篇的笔记
预计有x篇,其实我也不知道有几篇,基础篇写完了,再写应用篇,大致是这个计划
老手可以回顾回顾 ,温故知新~ 新手可以收藏一下 做个参考
GO是编译型的语言,部署前需要为不同的操作系统生成相应的二进制可执行文件,这个文件到底怎么生成,涉及哪些选项和参数,需要怎么优化,一次给你讲清楚
Go build 时除了,带了你写的代码外,还会带上你使用的依赖,标准库,和Go的整个runtime 如 调度器,垃圾回收器,内存管理器,网络轮询器 等所以即使你只打印了一行 Hello World 编译生成的文件也有 2M 多, 不过这样好处是,部署时非常方便,只需要一个文件就可以搞定
基础环境变量
你在运行 go build 时,会读取下面这些环境变量,原文可以参考结尾的[1]
环境变量 | 含义 | 可选值 |
GOOS | 目标操作系统 | Linux,Windows, macOS 等,这三个最常用 |
GOARCH | 目标处理器架构 | amd64, arm, arm64 这三个最常用 |
GOAMD64 | 使用的 AMD64指令集版本 | v1,v2,v3,v4 v1 是默认值 |
GOARM | ARM32位架构的版本 | 5,6,7 三个版本 |
GOARM64 | ARM64位架构的版本 | v8.{0-9} and v9.{0-5} |
CGO_ENABLED | 禁用 CGO 可以避免链接 C 运行时库,生成纯静态的二进制文件 | 0,1 |
GOOS 决定了要为哪个平台生成可执行的文件
GOARCH 是由你的CPU架构决定的, amd64 代表了 Intel和 AMD 的CPU
arm 则是指ARM 32 位处理器主要是 05年-14年处理器,如平板电脑, 树莓派
目前这类处理器大多已经淘汰
arm64指 arm公司推出的 64位版本,现在的智能手机,平板,苹果Mac 电脑
都是这个架构,常见处理器型号有苹果的 M1,M2,M3,M4, 高通骁龙8
如果你打算把应用部署在阿里云, 你可能会接触到他们的 :
倚天 710 ARMCPU 的ECS 以及
Ampere® Altra®处理器和 ECS这两种都是arm64 的架构

表格中的下面三行,刚说用来指定对应的构架版本
优化配置项:
配置项 | 作用 | 使用场景 |
-ldflags="-s -w" | 去除符号表和调试信息,可以缩小 20~30% 的体积 | 构建镜像时推荐使用 |
-trimpath | 从编译后的二进制文件中移除所有文件系统路径 | 构建镜像时推荐使用 |
-ldflags="-X ..." | 在编译时动态设置变量值,方便程序调试 | 构建镜像时推荐使用 |
以下是一个推荐的构建脚本
export CGO_ENABLED=0export GOOS=linuxexport GOARCH=amd64# 定义版本信息VERSION=$(gitdescribe --tags --always)COMMIT=$(gitrev-parse --short HEAD)BUILD_DATE=$(date -u'+%Y-%m-%dT%H:%M:%SZ')# 执行构建go build -trimpath \-ldflags="-s -w \-X main.Version=${VERSION} \-X main.Commit=${COMMIT} \-Xmain.BuildDate=${BUILD_DATE}" \-o bin/myapp \./cmd/myapp
参考:
[1].https://go.dev/wiki/MinimumRequirements#microarchitecture-support