您可以编写如下所示的自定义助手函数-
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¶m2=test3
个
CustomQueryParam
函数将把echo.Context
实例和查询参数名称作为函数参数.
然后,在for循环中,整个查询字符串(在我们的例子中是param=test1+test2¶m2=test3
)被&
拆分,并存储到由每个查询参数字符串([]string{"param=test1+test2", "param2=test3"}
)构成的字符串片中.
之后,我们迭代每个查询参数字符串,并再次拆分成包含两个值的字符串片,第一个值作为参数名,第二个值作为参数值.例如,对于第一个查询参数字符串,结果输出如下所示-
"param=test1+test2"
=>;[]string{"param", "test1+test2"}
然后,将第一个值(参数名称)指定为映射键,并将第二个值(参数值)指定为映射值.
对于每个查询字符串完成上述处理后,将返回按查询参数名称(该函数的参数)的映射值.
关于这个定制函数的一个有趣的事实是,如果没有找到查询参数,它将返回空字符串.