时间:2021-05-22
我就废话不多说了,大家还是直接看代码吧~
package mainimport ( "fmt" "net/url")// Manage the HTTP GET request parameterstype GetRequest struct { urls url.Values}// Initializerfunc (p *GetRequest) Init() *GetRequest { p.urls = url.Values{} return p}// Initialized from another instancefunc (p *GetRequest) InitFrom(reqParams *GetRequest) *GetRequest { if reqParams != nil { p.urls = reqParams.urls } else { p.urls = url.Values{} } return p}// Add URL escape property and value pairfunc (p *GetRequest) AddParam(property string, value string) *GetRequest { if property != "" && value != "" { p.urls.Add(property, value) } return p}// Concat the property and value pairfunc (p *GetRequest) BuildParams() string { return p.urls.Encode()}func main() { init := new(GetRequest).Init() params := init.AddParam("market", "sh").AddParam("Inst","6000987").BuildParams() //params := init.AddParam("market", "sh") fmt.Println(params)}结果:
Inst=6000987&market=sh
补充: golang常见字符串拼接通用处理方式
我们在日常开发中,尤其是对接第三方登录、支付、分享等功能时,时常需要对自己或接收到的数据进行一定的排序拼接后, 然后进行或加密或校验的处理,虽然写死顺序可以解决问题,但代码缺少了灵活性。
本文从通用性角度,以golang语言来处理一般情况下的字符串拼接问题。
目前已开发成专门的拼接工具go-join,欢迎使用并提出意见。
目前经常遇到的排序方式主要有以下两种:
1、参数名ASCII码从小到大排序
以下是微信开发者平台的签名要求:
签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
//JoinStringsInASCII 按照规则,参数名ASCII码从小到大排序后拼接//data 待拼接的数据//sep 连接符//onlyValues 是否只包含参数值,true则不包含参数名,否则参数名和参数值均有//includeEmpty 是否包含空值,true则包含空值,否则不包含,注意此参数不影响参数名的存在//exceptKeys 被排除的参数名,不参与排序及拼接func JoinStringsInASCII(data map[string]string, sep string, onlyValues, includeEmpty bool, exceptKeys ...string) string { var list []string var keyList []string m := make(map[string]int) if len(exceptKeys) > 0 { for _, except := range exceptKeys { m[except] = 1 } } for k := range data { if _, ok := m[k]; ok { continue } value := data[k] if !includeEmpty && value == "" { continue } if onlyValues { keyList = append(keyList, k) } else { list = append(list, fmt.Sprintf("%s=%s", k, value)) } } if onlyValues { sort.Strings(keyList) for _,v := range keyList { list = append(list,data[v]) } }else { sort.Strings(list) } return strings.Join(list, sep)}示例:
data := make(map[string]string) data["appid"] = "wx_1234535" data["body"] = "test data" data["mch_id"] = "572836589" data["notify_url"] = "http://以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Golang:接收GET和POST参数GET和POST是我们最常用的两种请求方式,今天讲一讲如何在golang服务中,正确接收这两种请求的参数信息。处理GET请
在使用Go语言进行开发的时候,有的时候可能要发送get或者post请求,下面我对post和get请求做一下简单的介绍:关于HTTP协议HTTP(即超文本传输协议
分片读取http超大文件流Golang中的HTTP发送get请求,在获取内容有两种情况。Golang发送httpget请求方式resp,err:=http.Ge
Vm中一个超链接URL需要拼接中文作为Get请求的参数。如果直接拼接,传到后台Action的参数对象中后取出会是乱码,需要编码后再拼接到URL上。解决方法是在A
一、在HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作: 1、GET======获取资源 2、PO