Go語言HTTP客戶端資料讀取總結
阿新 • • 發佈:2020-08-25
總結:
- 當讀取的位元組小於資料長度時,Read一般不會返回錯誤,除非資料還未接收完發生了異常(例如連線中斷,讀取超時等)
- 當讀取的位元組大於等於資料長度時,Read會返回讀取的位元組和EOF(End Of File),表示資料已經讀完了。
資料讀取的幾種方式
方式一:
b := make([]byte, clen) n, err := resp.Body.Read(b)
這裡需要判斷err是不是EOF
方式二:
1 bb := bytes.NewBuffer(nil) 2 n, err := io.Copy(bb, resp.Body)
這種方式無需判斷EOF錯誤
io.Copy與io.CopyBuffer的區別
共同點:
io.Copy與io.CopyBuffer實際都是copyBuffer實現的,只不過io.Copy只有源src和目的dst兩個引數;而io.CopyBuffer卻多了一個引數buf。
用途:
io.Copy可以把資料從一個連線拷貝到另外一個連線
io.CopyBuffer既可以把資料從一個連線拷貝到另外一個連線,還可以將資料儲存在一個buf中,而這個一份資料可以用作快取(即一邊接收,一邊傳送並且快取)