亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能以這種方式閱讀請求正文?

為什么我不能以這種方式閱讀請求正文?

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 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號