Go linker(go tool link)参数速查表
一、构建标识 / 版本 / 信息注入(最常用 ⭐⭐⭐)
| 参数 | 说明 | 常用 |
|---|---|---|
-B note |
设置 ELF Build ID / Mach-O UUID | ⭐ |
-buildid id |
设置 Go build ID(-buildid= 可禁用) |
⭐⭐ |
-X importpath.name=value |
向 string 变量注入值 | ⭐⭐⭐ |
-pluginpath path |
设置 plugin 的完整路径 | ⭐⭐ |
二、调试 / 符号 / DWARF(VSCode / dlv 重点 ⭐⭐⭐)
| 参数 | 说明 | 调试建议 |
|---|---|---|
-s |
去掉符号表 | ❌ 调试别用 |
-w |
去掉 DWARF 调试信息 | ❌ 调试别用 |
-compressdwarf |
压缩 DWARF(默认 true) | ⭐ 大工程可关 |
-randlayout |
随机函数布局 | ❌ |
-k symbol |
跟踪字段符号 | ❌ |
三、构建模式 / 插件 / C 交互(你关心的 ⭐⭐⭐)
| 参数 | 说明 | 备注 |
|---|---|---|
-buildmode |
构建模式(exe / c-shared / plugin) | ⭐⭐⭐ |
-linkmode |
internal / external | ⭐⭐ |
-extld |
指定外部 linker | ⭐ |
-extldflags |
传递给外部 linker 的参数 | ⭐ |
-aslr |
Windows c-shared 启用 ASLR | ⭐ |
四、性能 / 分析 / 运行时行为(中级 ⭐⭐)
| 参数 | 说明 |
|---|---|
-race |
启用竞态检测 |
-msan |
内存检查(Linux) |
-asan |
AddressSanitizer |
-memprofilerate |
runtime.MemProfileRate |
-cpuprofile |
CPU profile |
-memprofile |
内存 profile |
五、ELF / 系统级(Linux 为主,Windows 很少用)
| 参数 | 说明 |
|---|---|
-r path |
ELF 动态库搜索路径 |
-bindnow |
立即绑定符号 |
-I linker |
ELF 动态 linker |
-L dir |
库搜索路径 |
-d |
禁用动态可执行 |
六、调试 linker 自身(极少用)
| 参数 | 说明 |
|---|---|
-v |
打印 link trace |
-benchmark |
链接阶段性能 |
-benchmarkprofile |
链接阶段 profile |
-dumpdep |
符号依赖图 |
-c |
调用图 |
-debugnosplit |
nosplit 调用图 |
七、兼容 / 旧参数(了解即可)
| 参数 | 说明 |
|---|---|
-a |
no-op(已废弃) |
-n |
no-op(已废弃) |
-f |
忽略版本不匹配 |
-g |
禁用包数据检查 |
-h |
出错即停 |
最重要的 10 个(你现在真的会用的)
-X
-s
-w
-buildid
-buildmode
-linkmode
-extldflags
-compressdwarf
-race
-pluginpath
给你一个「实战对照表」
🔹 VSCode / dlv 调试(推荐)
# 什么 ldflags 都不要
# VSCode 自动加:
-gcflags=all=-N -l
🔹 发布版本(最经典)
-ldflags="-s -w -buildid="
🔹 插件 / 版本注入(强烈推荐)
-ldflags="-X myproject/core.Version=1.2.0 -X myproject/core.Mode=prod"
🔹 并发 / channel 排错
-race