I have a struct
type ClientSubscriptions struct {
    ID         int64
    Service    string
    Identifier string
    EventType  string
    DateBegin  *time.Time
    DateEnd    *time.Time
    Extra      map[string]string
}
and i have an origin source which send me some data. I have no problems with parsing such types as int64, string and time. But i can't convert json object Extra to my struct
func parseSubscription(data []interface{}) (*ClientSubscriptions, error) {
    if len(data) == 0 {
        return nil, nil
    }
    res := ClientSubscriptions{}
    values := reflect.ValueOf(&res).Elem()
    controlTupleSize := values.NumField()
    if len(data) < controlTupleSize {
        return nil,
            fmt.Errorf("unexpected control tuple size %d, want %d", len(data), controlTupleSize)
    }
    for i, v := range data {
        value := values.Field(i)
        switch value.Interface().(type) {
        case int64:
            val, err := utils.ParseToInt64(v)
            if err != nil {
                return nil, err
            }
            value.SetInt(val)
        case *time.Time:
            val := v.(uint64)
            date := time.Unix(int64(val), 0)
            value.Set(reflect.ValueOf(&date))
        case string:
            val := v.(string)
            value.SetString(val)
        case interface{}:
            val := v.(map[string]interface{})
            if len(val) > 0 {
                for key, info := range val {
                    strKey := fmt.Sprintf("%v", key)
                    strValue := fmt.Sprintf("%v", info)
                    value.SetMapIndex(reflect.ValueOf(strKey), reflect.ValueOf(strValue))
                }
            }
        }
    }
    return &res, nil
}
panic: assignment to entry in nil map
 
Aucun commentaire:
Enregistrer un commentaire