這是一個(gè)人為的例子。為什么 .Read 方法將響應(yīng)正文的字節(jié)讀取到我的字節(jié)切片中?“讀取讀取最多 len(p) 字節(jié)到 p。它返回讀取的字節(jié)數(shù)(0 <= n <= len(p))和遇到的任何錯(cuò)誤。為什么此請(qǐng)求不將任何數(shù)據(jù)讀取到 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貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
實(shí)際上,它確實(shí)按指定的方式工作。
如文檔(鏈接)中所述:io.Reader
Read reads up to len(p) bytes into p.
在你的例子中,你定義了一個(gè)長(zhǎng)度為零的字節(jié)片,所以從響應(yīng)中讀取零字節(jié)。
您可以通過(guò)打印 p 的長(zhǎng)度來(lái)驗(yàn)證這一點(diǎn):
p := []byte{} fmt.Printf("len of p: %d\n", len(p))
要?jiǎng)?chuàng)建非零長(zhǎng)度的字節(jié)切片,您可以使用:make()
p := make([]byte, 4096)
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報(bào)
0/150
提交
取消