code: func (ns *Namespace) Join(elements ...interface{}) (string, error) {
  	var pathElements []string
  	for _, elem := range elements {
  		switch v := elem.(type) {
  		case []string:
  			for _, e := range v {
  				pathElements = append(pathElements, filepath.ToSlash(e))
  			}
  		case []interface{}:
  			for _, e := range v {
  				elemStr, err := cast.ToStringE(e)
  				if err != nil {
  					return "", err
  				}
  				pathElements = append(pathElements, filepath.ToSlash(elemStr))
  			}
  		default:
  			elemStr, err := cast.ToStringE(elem)
  			if err != nil {
  				return "", err
  			}
  			pathElements = append(pathElements, filepath.ToSlash(elemStr))
  		}
  	}
  	return _path.Join(pathElements...), nil
  }
docs: // Join joins any number of path elements into a single path, adding a
  // separating slash if necessary. All the input
  // path elements are passed into filepath.ToSlash converting any Windows slashes
  // to forward slashes.
  // The result is Cleaned; in particular,
  // all empty strings are ignored.