apache / dubbo-go

Go Implementation For Apache Dubbo .
https://dubbo.apache.org/
Apache License 2.0
4.71k stars 925 forks source link

go中不同package里的数据结构,不应该因为同名而引起异常 #1454

Closed 63isOK closed 3 years ago

63isOK commented 3 years ago

What happened: go中不同包有同名数据结构注册,注册的java 路径不一样. 客户端调用服务端后,在解析服务端返回的数据时,会因为类型冲突导致报错,类似: err=reflect.Set: value of type record_interface.Result is not assignable to record_interface.Result What you expected to happen: 解析不出现异常 How to reproduce it (as minimally and precisely as possible): 不同package里的数据结构本就是隔离的,不应该因为同名就导致解析失败 Anything else we need to know?: h2,dubbo-go v3,dubbo协议

ChangedenCZD commented 3 years ago

解决方案 hessian.RegisterPOJO时支持同JavaClass不同go struct(包路径不同)

有关改动 dubbo-go/protocol/dubbo/impl/hessian.go

dubbo-go-hessian2

wongoo commented 3 years ago

@63isOK 实际案例是什么情况? java调用go吗? 是一个java对象不同业务场景需要解析为不同的go结构吗? 为何不定义一个go结构体即可?

ChangedenCZD commented 3 years ago

@63isOK 实际案例是什么情况? java调用go吗? 是一个java对象不同业务场景需要解析为不同的go结构吗? 为何不定义一个go结构体即可?

我按他描述做了个demo,能够复现

ChangedenCZD commented 3 years ago

@wongoo 不同JavaName的触发条件 image

1631934824165_670CBFB7-7009-45a5-AACA-7401D0F9F5E5

javaName入参是org.apache.dubbo.User,pojoRegistrt.j2g[javaName]返回的goName存在同名的情况,导致pojoRegistry.registry[g]获取了最后注册的那个同名struct