跳转至

反射

  • 指针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)  
}