Closed taoso closed 2 years ago
Go 在调用泛型函数的时候会为每一次的类型初始化生成不同的包装函数。 各包装函数会调用公共的底层函数。要想实现 mock,需要修改底层函数 代码段。
但是 Go 并没有提供获取底层函数指针的机制。目前的办法是遍历包装 函数代码段,找到第一个 CALL 指令。再根据 CALL 指令的参数计算底层 函数的位置。
因为支持泛型,所以 Go 最小支持版本为 1.18
https://taoshu.in/go/monkey/generic.html
Go 在调用泛型函数的时候会为每一次的类型初始化生成不同的包装函数。 各包装函数会调用公共的底层函数。要想实现 mock,需要修改底层函数 代码段。
但是 Go 并没有提供获取底层函数指针的机制。目前的办法是遍历包装 函数代码段,找到第一个 CALL 指令。再根据 CALL 指令的参数计算底层 函数的位置。
因为支持泛型,所以 Go 最小支持版本为 1.18
https://taoshu.in/go/monkey/generic.html