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

How to generate query string in golang?

在我的用例中,我需要 post 数据到 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.
} 

我正在努力寻找任何库 return 如果我为它提供参数,我会得到一个查询字符串。

我试过这样做:

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

但实际上 returns Values 是一张地图,所以它不好。

golang 中有创建 queryString 的方法吗?

你差不多明白了。调用 Values.Encode() 以 URL 编码形式对地图进行编码。

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

直接创建地图而不是使用req.URL.Query()到return空地图:

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