Golang Go语言中有像Java agent这种的技术吗?
java agent 可以在不修改源代码的情况下,来对程序做 instrument 。这个在实际中有很多应用,比如搞个 java agent 做可观测性相关的工作。
请教一下,go 有这种类似的方案和技术吗?
Golang Go语言中有像Java agent这种的技术吗?
做过个类似的东西 https://github.com/monsterxx03/gospy
不过只能读 runtime 信息,不能动态注入指令, 用处是不很大,但挺好玩的, 具体原理可以看 https://blog.monsterxx03.com/2019/09/20/gospy-non-invasive-goroutine-inspector/
更多关于Golang Go语言中有像Java agent这种的技术吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
涉及到 native 层,大多用钩子
现在潮流往 opentelemetry 走,统一的 instrument ,各种中间件厂商自己接入,对于支持 instrument 的组件,应用集成 sdk 就会可以 export 的了; golang 真心不建议走 java 以前玩 APM 的老路,而且 opentelemetry 就是 CNCF 顶级项目
在Golang中,并没有直接等同于Java Agent的技术,因为Java Agent是基于Java字节码的特性实现的,而Golang的编译机制和运行时环境与Java有显著不同。
然而,Golang也提供了一些强大的工具和机制,允许在编译期或运行期对程序进行修改和监控。例如,通过Golang的抽象语法树(AST)解析和变换,开发者可以在编译期对源代码进行修改,插入额外的逻辑或监控代码。这种方式虽然与Java Agent的字节码修改不同,但也能达到类似的效果。
此外,对于运行期的监控和修改,Golang也支持使用动态代理或插件等技术。这些技术允许在运行时对程序的行为进行拦截和修改,从而实现一些高级功能,如性能监控、日志记录等。
虽然Golang没有直接对应Java Agent的技术,但开发者可以通过利用Golang的编译期工具和运行期机制,实现类似的功能。同时,随着Golang生态系统的不断发展,未来也可能出现更加直接和高效的解决方案。