为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我不能以这种方式阅读请求正文?

为什么我不能以这种方式阅读请求正文?

Go
元芳怎么了 2022-08-15 16:22:58
这是一个人为的例子。为什么 .Read 方法将响应正文的字节读取到我的字节切片中?“读取读取最多 len(p) 字节到 p。它返回读取的字节数(0 <= n <= len(p))和遇到的任何错误。为什么此请求不将任何数据读取到 p 中?func Fetch(){    req, err := http.NewRequest("GET", "https://swapi.dev/api/people/1",nil)        if err != nil {        log.Println(err)        return    }    req.Close = true // closes the request once the request has been made    // Transport caches connections for future use     var transport = &http.Transport{DisableKeepAlives: true}    var myClient = &http.Client{Timeout: 10 * time.Second, Transport: transport}    resp, err := myClient.Do(req)    p := []byte{}    a1, err := resp.Body.Read(p)    // a, err := ioutil.ReadAll(resp.Body) // this works    fmt.Println(a1)    fmt.Println(err)    fmt.Println(p)}
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

实际上,它确实按指定的方式工作。

如文档(链接)中所述:io.Reader

Read reads up to len(p) bytes into p.

在你的例子中,你定义了一个长度为零的字节片,所以从响应中读取零字节。

您可以通过打印 p 的长度来验证这一点:

p := []byte{}
fmt.Printf("len of p: %d\n", len(p))

要创建非零长度的字节切片,您可以使用:make()

p := make([]byte, 4096)


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号