code: func getDictField(dict reflect.Value, key string) dictField {
  	// get valuev as a map value or as a struct field
  	switch dict.Kind() {
  	case reflect.Map:
  		value := reflect.New(dict.Type().Elem()).Elem()
  		return dictField{
  			Value: value,
  			Ok:    true,
  			Set: func() {
  				if dict.IsNil() {
  					dict.Set(reflect.MakeMap(dict.Type()))
  				}
  				// Assigns the value into the map.
  				dict.SetMapIndex(reflect.ValueOf(key).Convert(dict.Type().Key()), value)
  			},
  		}
  	case reflect.Struct:
  		sf, ok := getStructFieldForKey(dict.Type(), key)
  		if !ok {
  			return dictField{}
  		}
  		if sf.r.PkgPath != "" {
  			panic(&UnmarshalFieldError{
  				Key:   key,
  				Type:  dict.Type(),
  				Field: sf.r,
  			})
  		}
  		return dictField{
  			Value: dict.FieldByIndex(sf.r.Index),
  			Ok:    true,
  			Set:   func() {},
  			IgnoreUnmarshalTypeError: sf.tag.IgnoreUnmarshalTypeError(),
  		}
  	default:
  		return dictField{}
  	}
  }
docs: // Returns specifics for parsing a dict field value.