登录
首页 >  Golang >  Go问答

为何无法通过这种方式获取请求主体?

来源:stackoverflow

时间:2024-03-08 12:00:25 434浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《为何无法通过这种方式获取请求主体?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

这是一个人为的示例。

为什么 .read 方法不将响应正文的字节读取到我的字节片中? “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)
}

正确答案


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

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)

本篇关于《为何无法通过这种方式获取请求主体?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>