Closed zhangbin116 closed 6 days ago
我也遇到这个问题. 环境: win11, amd64, go1.22, gomonkey v2.11.0
type A struct { ants.Pool} func(a *A)methodA(){ s.Pool.Submit(func(){ a.methodB() }) } func(a *A)methodB(){}
在测试时,发现applyPrivateMethod无法生效, 不过applyMethod是生效的。 对于gomonkey的原理完全不了解, 是否可以帮忙看看呢。
我也遇到这个问题. 环境: win11, amd64, go1.22
type A struct { ants.Pool} func(a *A)methodA(){ s.Pool.Submit(func(){ a.methodB() }) } func(a *A)methodB(){}
在测试时,发现applyPrivateMethod无法生效。 对于gomonkey的原理完全不了解, 是否可以帮忙看看呢。
Gomonkey的mock并发不安全,可以尝试一下xgo,对比可以参考这里:https://github.com/agiledragon/gomonkey/issues/157#issuecomment-2068470045
我也遇到这个问题. 环境: win11, amd64, go1.22
type A struct { ants.Pool} func(a *A)methodA(){ s.Pool.Submit(func(){ a.methodB() }) } func(a *A)methodB(){}
在测试时,发现applyPrivateMethod无法生效。 对于gomonkey的原理完全不了解, 是否可以帮忙看看呢。
Gomonkey的mock并发不安全,可以尝试一下xgo,对比可以参考这里:#157 (comment)
有时间瞅瞅,不过测试的过程中没有并发的情况,gomonkey也不支持
我也遇到这个问题. 环境: win11, amd64, go1.22
type A struct { ants.Pool} func(a *A)methodA(){ s.Pool.Submit(func(){ a.methodB() }) } func(a *A)methodB(){}
在测试时,发现applyPrivateMethod无法生效。 对于gomonkey的原理完全不了解, 是否可以帮忙看看呢。
Gomonkey的mock并发不安全,可以尝试一下xgo,对比可以参考这里:#157 (comment)
gomonkey并发不安全指的是什么?apply patch的时候吗?其他地方似乎没有问题
apply patch也可以通过预先stw来解决
我也遇到这个问题. 环境: win11, amd64, go1.22
type A struct { ants.Pool} func(a *A)methodA(){ s.Pool.Submit(func(){ a.methodB() }) } func(a *A)methodB(){}
在测试时,发现applyPrivateMethod无法生效。 对于gomonkey的原理完全不了解, 是否可以帮忙看看呢。
Gomonkey的mock并发不安全,可以尝试一下xgo,对比可以参考这里:#157 (comment)
gomonkey并发不安全指的是什么?apply patch的时候吗?其他地方似乎没有问题
apply patch也可以通过预先stw来解决
stw怎么执行呢?我没有看到相关的教程哈哈😆
并发不安全是因为gomoneky会修改内存中的数据,多个协程并发patch,就会出现data race,所以导致数据错乱,程序崩溃。
我也遇到这个问题. 环境: win11, amd64, go1.22
type A struct { ants.Pool} func(a *A)methodA(){ s.Pool.Submit(func(){ a.methodB() }) } func(a *A)methodB(){}
在测试时,发现applyPrivateMethod无法生效。 对于gomonkey的原理完全不了解, 是否可以帮忙看看呢。
Gomonkey的mock并发不安全,可以尝试一下xgo,对比可以参考这里:#157 (comment)
gomonkey并发不安全指的是什么?apply patch的时候吗?其他地方似乎没有问题 apply patch也可以通过预先stw来解决
stw怎么执行呢?我没有看到相关的教程哈哈😆
并发不安全是因为gomoneky会修改内存中的数据,多个协程并发patch,就会出现data race,所以导致数据错乱,程序崩溃。
不是gomonkey自己提供的,是另外一个项目,mockey
https://github.com/bytedance/mockey/blob/main/internal/monkey/mem/write.go
算是一种hack,不过go1.23即将禁止go:linkname引用标准库未导出的函数了。所有这些hack最终都将失效。
func methodA(){
... go methodB() .... }
gomonkey.ApplyFunctionReturn(methodB) linux环境下,不生效