我在其中一个项目中使用了https://github.com/labstack/echo.我使用c.QueryParam来解析查询参数及其值.其中一个值包含+符号,它会将它们转换为空格字符(这是正确的).但是,我想保留值中的+个字符.

例如:http://localhost:8080?param=test+test

fmt.Println(c.QueryParam("param"))

目前,它的输出功率为test test.然而,我预计输出为test+test.用c.QueryParam能实现吗?

推荐答案

您可以编写如下所示的自定义助手函数-

func CustomQueryParam(c echo.Context, name string) string {
    qParams := make(map[string]string)
    for _, singleQueryParamStr := range strings.Split(c.QueryString(), "&") {
        val := strings.Split(singleQueryParamStr, "=")
        qParams[val[0]] = val[1]
    }
    return qParams[name]
}

func TestGet(c echo.Context) error {
    param := CustomQueryParam(c, "param")
    fmt.Println(param)

    return c.JSON(http.StatusOK, map[string]interface{}{
        "message": "request is successful",
    })
}

现在,yields 与您的预期一致.它打印test+test张.但是CustomQueryParam到底做了什么呢?

好了,让我们来探索一下其中的洞察力.假设API调用为-

http://localhost:8080?param=test1+test2&param2=test3

CustomQueryParam函数将把echo.Context实例和查询参数名称作为函数参数.

然后,在for循环中,整个查询字符串(在我们的例子中是param=test1+test2&param2=test3)被&拆分,并存储到由每个查询参数字符串([]string{"param=test1+test2", "param2=test3"})构成的字符串片中.

之后,我们迭代每个查询参数字符串,并再次拆分成包含两个值的字符串片,第一个值作为参数名,第二个值作为参数值.例如,对于第一个查询参数字符串,结果输出如下所示-

"param=test1+test2"=>;[]string{"param", "test1+test2"}

然后,将第一个值(参数名称)指定为映射键,并将第二个值(参数值)指定为映射值.

对于每个查询字符串完成上述处理后,将返回按查询参数名称(该函数的参数)的映射值.

关于这个定制函数的一个有趣的事实是,如果没有找到查询参数,它将返回空字符串.

Go相关问答推荐

Golang regexpp:获取带有右括号的单词

你能帮我优化一个golang代码关于函数CrossPointTwoRect

向API网关终结点发出POST请求时出现AWS Lambda With Go:";Rune me.InvalidEntrypoint";错误

如何在GoFr中为生产和本地环境设置不同的配置?

如何执行asn 1 marshal/unmarshal和omit字段?

Go 中将 int 切片转换为自定义 int 切片指针类型的函数

Golang校验器包:重命名字段错误处理

如何在 Go 中将 int 转换为包含 complex128 的泛型类型?

Go Template if 条件

如何使用泛型将接口转换为指定类型

regex.ReplaceAll 但如果替换则添加相同数量的字符

assert: mock: I don't know what to return because the method call was unexpected 在 Go 中编写单元测试时出错

Wire google Inject with multi return from provider 函数

从 os.stdout 读取

在 go 中将运行命令的标准输出发送到其标准输入

即使一个测试用例失败,如何运行所有测试用例

Go AST:获取所有 struct

使用 Go 读取 TOML 文件时结果为空

Go 导入范围查找 protobuf 类型

Go Flag 用法 描述 包含 Word 值