【发布时间】:2015-08-19 13:55:51
【问题描述】:
我对 Go 还是很陌生,还不太了解所有内容。在许多现代语言 Node.js、Angular、jQuery、PHP 中,您可以使用附加的查询字符串参数执行 GET 请求。
在 Go 中执行此操作并不像看起来那么简单,而且我还不能真正弄清楚。我真的不想为我想做的每个请求连接一个字符串。
这里是示例脚本:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
client := &http.Client{}
req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil)
req.Header.Add("Accept", "application/json")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Errored when sending request to the server")
return
}
defer resp.Body.Close()
resp_body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(resp.Status)
fmt.Println(string(resp_body))
}
在此示例中,您可以看到有一个 URL,它需要 api_key 的 GET 变量,并将您的 api 键作为值。问题在于这会以以下形式进行硬编码:
req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular?api_key=mySuperAwesomeApiKey", nil)
有没有办法动态构建这个查询字符串?目前,我需要在此步骤之前组装 URL 以获得有效响应。
【问题讨论】:
-
那么连接字符串有什么问题?
-
我想什么都没有,但这并不是一个真正优雅的解决方案,只是认为在 Go 中有更好的做事方式。您会看到动作和方法的变化,然后您必须将所有内容串在一起。
-
你可以使用
url.Values的Encode方法。您还可以使用URL.String来构建整个 URL。