原创Golang技术交流

GoLang处理URL提取Get参数

2018-10-09  本文已影响31人  IT锟
图片来源于网络

我们在项目里面大部分都是直接使用封装好的网络库,需要获取请求里面的参数直接调他们的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)

上一篇下一篇

猜你喜欢

热点阅读