code: func (dec Decoder) init() error {
  	// iterate over the form's values and decode it
  	for k, v := range dec.formValues {
  		dec.path = k
  		dec.values = v
  		dec.curr = dec.main
  		if err := dec.analyzePath(); err != nil {
  			if dec.curr.Kind() == reflect.Struct && dec.opts.IgnoreUnknownKeys {
  				continue
  			}
  			return err
  		}
  	}
  	// set values of maps
  	for _, v := range dec.maps {
  		key := v.ma.Type().Key()
  		ptr := false
  		// check if the key implements the UnmarshalText interface
  		var val reflect.Value
  		if key.Kind() == reflect.Ptr {
  			ptr = true
  			val = reflect.New(key.Elem())
  		} else {
  			val = reflect.New(key).Elem()
  		}
  		// decode key
  		dec.path = v.path
  		dec.field = v.path
  		dec.values = []string{v.key}
  		dec.curr = val
  		//dec.isKey = true
  		if err := dec.decode(); err != nil {
  			return err
  		}
  		// check if the key is a pointer or not. And if it is, then get its address
  		if ptr && dec.curr.Kind() != reflect.Ptr {
  			dec.curr = dec.curr.Addr()
  		}
  		// set key with its value
  		v.ma.SetMapIndex(dec.curr, v.value)
  	}
  	return nil
  }
docs: // init initializes the decoding