cru*_*nk1 2 polymorphism json nested go unmarshalling
这是一个示例(另请参见https://play.golang.org/p/or7z4Xc8tN):
package main
import (
"encoding/json"
"fmt"
)
type A struct {
X string
Y int
}
type B struct {
A
Y string
}
func main() {
data := []byte(`{"X": "me", "Y": "hi"}`)
b := &B{}
json.Unmarshal(data, b)
fmt.Println(b)
fmt.Println(b.A)
b = &B{}
data = []byte(`{"X": "me", "Y": 123}`)
json.Unmarshal(data, b)
fmt.Println(b)
fmt.Println(b.A)
}
Run Code Online (Sandbox Code Playgroud)
哪些输出:
&{{me 0} hi}
{me 0}
&{{me 0} }
{me 0}
Run Code Online (Sandbox Code Playgroud)
有没有办法多态地将字段 Y 解组为 int 或 string?或者甚至因为 BY 被定义而完全解组为 AY ?
我知道有些人可能会建议使用诸如 之类的东西进行解组json.Unmarshall(data, &b.A),但我不知道我是否可以将其融入我当前的设计中。
Go 唯一的多态性是接口。嵌入不提供多态性。
如果您尝试解组 JSON,而您无法假设其中一个字段的类型,则可以使用类型字段interface{}以及类型断言fmt.Sprint、 或反射。你应该使用哪个取决于特定的用例——一旦你获得了价值,你打算用它做什么?在某些时候,您必须关心它是 anint还是 a string,这将决定您如何处理该值。
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |