作者回复: go原生不支持注解功能。官方对此原因没有任何说明。go支持struct tag,一定程度具备了annotation的性质。
作者回复: 嗯,不错的思路。
作者回复: waitgroup是go标准库sync包提供的一个功能特性,常用用于等待一组子goroutine的退出。可以看看go官方相关文档以及文档中的用法。
作者回复: 都用build tag了,应该就不需要shouldprint了吧。
作者回复: 👍
作者回复: 1. 关于go增量编译,可以了解一下 https://tonybai.com/2022/03/21/go-native-support-incremental-build 2. 第一个思路✅。第二种思路维护起来过于麻烦了。
作者回复: 这不能怪你,因为这里使用了接口的类型断言(type assert)语法,可以先看看第28讲后,再回来看这段代码。
作者回复: 1. go的map类型如果发现多个goroutine尝试对其进行写操作,但没有加锁,就可能抛出panic 2. 思路不错,但我对ssa ir了解不多,如果你对ssa ir很了解,建议你尝试一下,有成果后也可以分享出来。
作者回复: 1. 这里所谓的foo函数返回后,指的是defer函数被执行,deferred函数即是那个闭包函数。 2.pc是程序计数器,冯 ·诺伊曼计算机体系结构中的一个寄存器。可以自行google或baidu一下。 3. go build后,instrument程序会出现在当前目录下。 4. 最大原因还是避免被滥用。避免写出强依赖goroutine id的代码。因为强依赖goroutine将导致代码不好移植,同时也会导致并发模型复杂化。 5. 提示里有,使用build tag。关于build tag用法,可以参考go官方文档。
作者回复: 问题1:批量注入 可以试试 https://github.com/bigwhite/functrace/blob/main/scripts/batch_add_trace.sh这个脚本。 问题2:build tag看看go官方文档吧。不难。 问题3: 欢迎你的pr,https://github.com/bigwhite/functrace