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

这是一个人为的例子。


为什么 .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)

}


元芳怎么了
浏览 138回答 1
1回答

白衣染霜花

实际上,它确实按指定的方式工作。如文档(链接)中所述:io.ReaderRead&nbsp;reads&nbsp;up&nbsp;to&nbsp;len(p)&nbsp;bytes&nbsp;into&nbsp;p.在你的例子中,你定义了一个长度为零的字节片,所以从响应中读取零字节。您可以通过打印 p 的长度来验证这一点:p&nbsp;:=&nbsp;[]byte{} fmt.Printf("len&nbsp;of&nbsp;p:&nbsp;%d\n",&nbsp;len(p))要创建非零长度的字节切片,您可以使用:make()p&nbsp;:=&nbsp;make([]byte,&nbsp;4096)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go