如何从另一个请求返回正文

req, err := http.NewRequest("GET", "https://api.github.com/repos/octocat/Hello-World/pulls/1347", nil)

req.Header.Set("Accept", "application/vnd.github.v3.patch")

if err != nil {

    check(err)

}

body, err := ioutil.ReadAll(req.Body)

ctxt.JSON(http.StatusOK, body)

在这里,我需要从 github api 的主体发送 api 响应。但在这里我收到以下错误:


“运行时错误:无效的内存地址或 nil 指针取消引用”


潇湘沐
浏览 118回答 2
2回答

有只小跳蛙

您正在创建一个带有 nil 正文的新 GET 请求。请参阅 http.NewRequest 的函数签名func NewRequest(method, url string, body io.Reader) (*Request, error)因此,当您访问 resp.Body 时,它当然会为零。此外,http.NewRequest 只是返回一个请求,它实际上并没有执行它。要使用您的请求实际发出 GET 请求,您需要将其传递给 http 客户端的Do方法。像这样:response, err := http.DefaultClient.Do(resp)编辑:我还要补充一点,将您的请求命名resp为令人困惑。我建议将变量重命名为req或request

慕少森

此代码将解决您的问题。client := &http.Client{}apiURL := "https://api.github.com/repos/octocat/Hello-World/pulls/1347"req, err := http.NewRequest("GET", apiURL, nil)if err != nil {    check(err)}req.Header.Add("Accept", "application/vnd.github.v3.patch")response, err := client.Do(req)if err != nil {    check(err)}defer response.Body.Close()contents, err := ioutil.ReadAll(response.Body)if err != nil {    check(err)}ctxt.JSON(http.StatusOK, string(contents))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go