// Package util... // // Description : util... // // Author : go_developer@163.com<白茶清欢> // // Date : 2021-11-04 2:38 下午 package util import ( "net/url" "strings" ) // URLParseResult url解析 // // Author : go_developer@163.com<白茶清欢> // // Date : 2:51 下午 2021/11/4 type URLParseResult struct { Scheme string `json:"scheme"` Domain string `json:"domain"` URI string `json:"uri"` Parameter map[string]string `json:"parameter"` } // ownURL ... // // Author : go_developer@163.com<白茶清欢> // // Date : 15:38 2022/5/14 type ownURL struct { } // Encode ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2:39 下午 2021/11/4 func (ou *ownURL) Encode(inputURL string) string { return url.QueryEscape(inputURL) } // Decode ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2:39 下午 2021/11/4 func (ou *ownURL) Decode(inputURL string) (string, error) { return url.QueryUnescape(inputURL) } // Parse url解析 // // Author : go_developer@163.com<白茶清欢> // // Date : 2:39 下午 2021/11/4 func (ou *ownURL) Parse(inputURL string) (*URLParseResult, error) { var ( parseResult *url.URL err error ) if parseResult, err = url.Parse(inputURL); nil != err { return nil, err } detail := &URLParseResult{ Scheme: parseResult.Scheme, Domain: parseResult.Host, URI: parseResult.Path, Parameter: make(map[string]string), } for k, v := range parseResult.Query() { if len(v) > 1 { detail.Parameter[k] = "[" + strings.Join(v, ",") + "]" } else { detail.Parameter[k] = v[0] } } return detail, nil } // BuildQueryURL 构建GET链接 // // Author : go_developer@163.com<白茶清欢> // // Date : 2:43 下午 2021/11/4 func (ou *ownURL) BuildQueryURL(apiURL string, parameter map[string]string) string { u := url.Values{} for k, v := range parameter { u.Set(k, v) } apiURL = strings.Trim(apiURL, "?") if strings.Contains(apiURL, "?") { return apiURL + "&" + u.Encode() } return apiURL + "?" + u.Encode() }