我们在项目里面大部分都是直接使用封装好的网络库,需要获取请求里面的参数直接调他们的API就可以了。
今天我突发奇想,他们是怎么做到的,自己也尝试着写了一段代码来提取GET里面的参数,班门弄斧了。
这是我的代码片段,一起交交流下:
urlStr := "/index/show?name=zs&age=12"
//查找字符串的位置
questionIndex := strings.Index(urlStr, "?")
//判断是否存在/符号
cutIndex := strings.Index(urlStr, "/")
//打散成数组
rs := []rune(urlStr)
//用于存储请求的地址切割
requestSlice := make([]string, 0, 0)
//用于存储请求的参数字典
parameterDict := make(map[string]string)
//请求地址
requsetStr := ""
//参数地址
parameterStr := ""
//判断是否存在 ?
if questionIndex != -1 {
//判断url的长度
parameterStr = string(rs[questionIndex+1 : len(urlStr)])
requsetStr = string(rs[0:questionIndex])
//参数数组
parameterArray := strings.Split(parameterStr, "&")
//生成参数字典
for i := 0; i < len(parameterArray); i++ {
str := parameterArray[i]
if len(str) > 0 {
tem := strings.Split(str, "=")
if len(tem) > 0 && len(tem) == 1 {
parameterDict[tem[0]] = ""
} else if len(tem) > 1 {
parameterDict[tem[0]] = tem[1]
}
}
}
} else {
requsetStr = urlStr
}
//判断是否存在 /
if cutIndex == -1 {
requestSlice = append(requestSlice, requsetStr)
} else {
//按 / 切割
requestArray := strings.Split(requsetStr, "/")
for i := 0; i < len(requestArray); i++ {
//判断第一个字符
if i == 0 {
//判断第一个字符串是否为空
if len(requestArray[i]) != 0 {
requestSlice = append(requestSlice, requestArray[i])
}
} else {
requestSlice = append(requestSlice, requestArray[i])
}
}
}
log.Println("参数url:")
log.Println(parameterStr)
log.Println("请求url:")
log.Println(requsetStr)
log.Println("参数字典:")
log.Println(parameterDict)
log.Println("请求的字典:")
log.Println(requestSlice)
有疑问加站长微信联系(非本文作者)