package http import ( "encoding/json" "net/url" "sort" "strings" ) func FormatURLParam(body map[string]interface{}) (urlParam string) { var ( buf strings.Builder keys []string ) for k := range body { keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { v, ok := body[k].(string) if !ok { v = convertToString(body[k]) } if v != "" { buf.WriteString(url.QueryEscape(k)) buf.WriteByte('=') buf.WriteString(url.QueryEscape(v)) buf.WriteByte('&') } } if buf.Len() <= 0 { return "" } return buf.String()[:buf.Len()-1] } func convertToString(v interface{}) (str string) { if v == nil { return "" } var ( bs []byte err error ) if bs, err = json.Marshal(v); err != nil { return "" } str = string(bs) return } func ConvertToString(v interface{}) (str string) { str = convertToString(v) return }