如何在golang中生成查询字符串?

时间:2020-07-19 03:18:00

标签: http go url query-parameters

在我的用例中,我需要将数据发布到url,但是数据本身是一个查询字符串。 示例:

curl -POST -d "username=abc&rememberme=on&authtype=intenal" "https..somemdpoint"

我所拥有的是一种可以接受3个值的方法

function makePostRequest(username string, rememberme string, authtype string, endpoint string) {
  // post a curl request.
} 

如果要为它提供参数,我会努力寻找任何能够返回查询字符串的库。

我尝试这样做:

q := req.URL.Query()
q.Add("api_key", "key_from_environment_or_flag")
q.Add("another_thing", "foobar")
fmt.Print(q)

但是意识到它实际上返回的是Values,这是一个映射,所以没有好处。

golang中是否存在任何创建queryString的方法?

1 个答案:

答案 0 :(得分:5)

您几乎明白了。调用Values.Encode(),以URL编码形式对地图进行编码。

fmt.Print(q.Encode()) // another_thing=foobar&api_key=key_from_environment_or_flag

直接创建地图,而不使用req.URL.Query()返回一个空地图:

values := url.Values{}
values.Add("api_key", "key_from_environment_or_flag")
values.Add("another_thing", "foobar")
query := values.Encode()

使用strings.NewReader(query)获取POST请求正文的io.Reader