code: func (r Route) CreatePath(params Params) (string, error) {
  	components := strings.Split(r.Path, "/")
  	for i, c := range components {
  		if len(c) == 0 {
  			continue
  		}
  		if c[0] == ':' {
  			val, ok := params[c[1:]]
  			if !ok {
  				return "", fmt.Errorf("missing param %s", c)
  			}
  			components[i] = val
  		}
  	}
  
  	u, err := url.Parse(strings.Join(components, "/"))
  	if err != nil {
  		return "", err
  	}
  	return u.String(), nil
  }
docs: // CreatePath combines the route's path pattern with a Params map
  // to produce a valid path.