反射
- 指针Type的Name是空字符串,只有是类型定义才会返回类型名
序列化
any类型但只要先赋值零值,即可反序列化为对应的类型而不是强行map
json.indirect:从这里发现,如果是interface则会取Elem,这个类型是指针则才会继续取类型,否则用默认类型
func TestAnyUnmarshal(t *testing.T) {
type A struct {
AnyValue any
}
type B struct {
V string
}
a := &A{}
b := &B{V: "1"}
a.AnyValue = b
jsonBytes, err := json.Marshal(a)
require.NoError(t, err)
t.Log(string(jsonBytes))
a2 := &A{}
err = json.Unmarshal(jsonBytes, a2)
require.NoError(t, err)
_ = a2.AnyValue.(map[string]any)
a3 := &A{}
a3.AnyValue = &B{}
err = json.Unmarshal(jsonBytes, a3)
require.NoError(t, err)
require.Equal(t, a, a3)
}