func urlParse(v string) map[string]interface{} {
	dict := map[string]interface{}{}
	parsedUrl, err := url.Parse(v)
	if err != nil {
		panic(fmt.Sprintf("unable to parse url: %s", err))
	}
	dict["scheme"]    = parsedUrl.Scheme
	dict["host"]      = parsedUrl.Host
	dict["hostname"]  = parsedUrl.Hostname()
	dict["path"]      = parsedUrl.Path
	dict["query"]     = parsedUrl.RawQuery
	dict["opaque"]    = parsedUrl.Opaque
	dict["fragment"]  = parsedUrl.Fragment
	if parsedUrl.User != nil {
		dict["userinfo"]  = parsedUrl.User.String()
	} else {
		dict["userinfo"] = ""
	}
	return dict
}
parses given URL to return dict object
package sprig
import (
	"fmt"
	"net/url"
	"reflect"
)
func dictGetOrEmpty(dict map[string]interface{}, key string) string {
	value, ok := dict[key]; if !ok {
		return ""
	}
	tp := reflect.TypeOf(value).Kind()
	if tp != reflect.String {
		panic(fmt.Sprintf("unable to parse %s key, must be of type string, but %s found", key, tp.String()))
	}
	return reflect.ValueOf(value).String()
}