You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
这个结构体 C 有两个叫 Name 的字段,在 Go 官方的 json 库里会把两个都忽略掉。但 go-hessian2 并没有做类似的工作。因为无论怎么处理,都会让人难以理解,开发者应该避免使用这样的用法。如果因为一些失误确实定义了重复的字段,可以使用 hessian:"-" 来忽略其中一个( json 库也支持这样处理)
指针类型的匿名字段
如
typeDogstruct {
*Animal
}
尽管 Go 里可以这样定义结构体。但是Java 里的父类是不可能为空的,hessian 协议当然也不支持。所以 go-hessian2 也不支持这样的继承。
The text was updated successfully, but these errors were encountered:
本文描述 dubbo-go-hessian2 如何处理 Java 中的继承。
为便于描述,下文会用一些特定的名词:
hessian
表示 Java 版本的 hessian 库go-hessian2
用来指当前库。Java 继承
Hessian 在序列化继承时,会将父类的属性展开到子类里(效果等同于把这些字段定义在子类里)。也就是说,在 hessian 的编码里,我们无法区分出这个字段是来自当前的类还是父类。所以我们做的工作就是把这些字段一一映射到 Go 的 struct 里。
Go 嵌入字段(匿名字段)
在 Go 里是没有继承这一概念的,但一般的,我们用匿名字段的方式来达到类似继承的字段复用效果。这是我们必须面临的问题,因此我们特别的支持了如下这种情况
由于上面提到的原因,我们其实无法识别这个
name
字段是父类的还是子类的,所以对于这个 Java 类,下面这段 Go 定义也是可以识别的。一般情况下,这些足够使用了。因此对于一些复杂的情况,我们并未完全处理。
暂不支持的情况
Go 里多个匿名字段拥有同样的字段名
这个结构体 C 有两个叫 Name 的字段,在 Go 官方的 json 库里会把两个都忽略掉。但
go-hessian2
并没有做类似的工作。因为无论怎么处理,都会让人难以理解,开发者应该避免使用这样的用法。如果因为一些失误确实定义了重复的字段,可以使用hessian:"-"
来忽略其中一个( json 库也支持这样处理)指针类型的匿名字段
如
尽管 Go 里可以这样定义结构体。但是Java 里的父类是不可能为空的,hessian 协议当然也不支持。所以
go-hessian2
也不支持这样的继承。The text was updated successfully, but these errors were encountered: