code: func (p *Params) calcValues() url.Values {
  	numParams := len(p.Query) + len(p.Fixed) + len(p.Route) + len(p.Form)
  
  	// If there were no params, return an empty map.
  	if numParams == 0 {
  		return make(url.Values, 0)
  	}
  
  	// If only one of the param sources has anything, return that directly.
  	switch numParams {
  	case len(p.Query):
  		return p.Query
  	case len(p.Route):
  		return p.Route
  	case len(p.Fixed):
  		return p.Fixed
  	case len(p.Form):
  		return p.Form
  	}
  
  	// Copy everything into a param map,
  	// order of priority is least to most trusted
  	values := make(url.Values, numParams)
  
  	// ?query string parameters are first
  	for k, v := range p.Query {
  		values[k] = append(values[k], v...)
  	}
  
  	// form parameters append
  	for k, v := range p.Form {
  		values[k] = append(values[k], v...)
  	}
  
  	// :/path parameters overwrite
  	for k, v := range p.Route {
  		values[k] = v
  	}
  
  	// fixed route parameters overwrite
  	for k, v := range p.Fixed {
  		values[k] = v
  	}
  
  	return values
  }
docs: // calcValues returns a unified view of the component param maps.