1. 程式人生 > 實用技巧 >Go語言HTTP客戶端資料讀取總結

Go語言HTTP客戶端資料讀取總結

總結:

  1. 當讀取的位元組小於資料長度時,Read一般不會返回錯誤,除非資料還未接收完發生了異常(例如連線中斷,讀取超時等)
  2. 當讀取的位元組大於等於資料長度時,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中,而這個一份資料可以用作快取(即一邊接收,一邊傳送並且快取)