github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/net/url.go (about)

     1  package net
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"net/url"
     7  	"strings"
     8  )
     9  
    10  var LocalIP string
    11  
    12  func init() {
    13  	LocalIP = GetLocalIPAddress()
    14  }
    15  
    16  //QueryStringToMap 将URL查询字符串中的参数转换成map
    17  func QueryStringToMap(urlQuery string) (result map[string]interface{}, err error) {
    18  	index := strings.IndexAny(urlQuery, "?")
    19  	if index == -1 || index >= len(urlQuery)-1 {
    20  		return
    21  	}
    22  	values, err := url.ParseQuery(urlQuery[index+1:])
    23  	if err != nil {
    24  		err = fmt.Errorf("url ParseQuery fail: %v", err)
    25  		return
    26  	}
    27  	result = make(map[string]interface{})
    28  	for k, v := range values {
    29  		if len(v) == 1 {
    30  			result[k] = v[0]
    31  		} else {
    32  			result[k] = v
    33  		}
    34  	}
    35  
    36  	return
    37  }
    38  func GetQueryWithMap(data map[string]string) (res string, err error) {
    39  	buf := bytes.Buffer{}
    40  
    41  	for k, v := range data {
    42  		buf.WriteString(k)
    43  		buf.WriteString("=")
    44  		buf.WriteString(url.QueryEscape(v))
    45  		buf.WriteString("&")
    46  	}
    47  	res = buf.String()
    48  	res = strings.TrimRight(res, "&")
    49  	return
    50  }