Java 有 -javaagent,Python 有 sitecustomize,Node.js 有 --require,.NET 有 CLR Profiler,这些语言的 Agent 能在运行时动态注入探针。而 Go 做不到,原因很本质:
- Go 编译为静态二进制,没有 VM、没有字节码、没有类加载钩子。
- 一旦 go build 完成,产出的就是一个独立的机器码文件,运行时没有任何可以“挂载”探针的入口。
这导致 Go 开发者长期只能在手动埋点(侵入性强、遗漏率高)和 eBPF 外部观测(零侵入但只能看到 L4/L7 协议层,拿不到业务语义)之间选择,二者之间存在巨大的空白地带。编译时插桩正是填补这个空白的方案。




