agiledragon / agiledragon/gomonkey

ApplyMethod possibly not work with generic types

Đang mở
#104 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Go
Star
2.3k
Fork
192
Merge trung bình
1 ngày 6 giờ
Pull request đã merge (30 ngày)
1

Mô tả

这里定义了一个泛型的结构体,大致是这样:
```golang
type Table[T any] struct {
...
}

func (t *Table[T]) Add(network net.IPNet, value T) bool {
...
}
```
这里内容无关紧要,在使用gomonkey patch了叫Add的方法后,发现单元测试并未成功,调用的依旧是原本的Add。

进一步定位发现,reflect包获取到的方法名和实际的Add方法的signature并不相同,实际上方法地址也并不相同

reflect获取的方法名和地址:
```
0x1c56aa0
XXX.(*Table[string]).Add(SB)
:1 0x1c56aa0 493b6610 cmp rsp, qword ptr [r14+0x10]
:1 0x1c56aa4 0f86cd000000 jbe 0x1c56b77
```

实际调用的方法名和地址:
```
XXX.(*Table[go.shape.string_0]).Add(SB) .../cidrtable.go
=> cidrtable.go:29 0x1c56020 4c8da42458ffffff lea r12, ptr [rsp+0xffffff58]
cidrtable.go:29 0x1c56028 4d3b6610 cmp r12, qword ptr [r14+0x10]
```

gomonkey是通过取reflect记录的地址来修改实际调用的,但是看来这个方式对于泛型方法暂且不适用

golang版本1.18.2和1.18.5均存在上述问题

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.