當我嘗試從一個讀者手動作家複製,我發現這工作:從讀取器讀取並寫入Golang中的Writer時是否需要檢查非零長度?
func fromAToB(a, b net.Conn) {
buf := make([]byte, 1024*32)
for {
n, err := a.Read(buf)
if n > 0 {
if err != nil {
log.Fatal(err)
}
b.Write(buf[0:n])
}
}
}
但這並不
func fromAToB(a, b net.Conn) {
buf := make([]byte, 1024*32)
for {
_, err := a.Read(buf)
if err != nil {
log.Fatal(err)
}
b.Write(buf)
}
}
所以問題是:
- 爲什麼檢查
if n>0
是必要的? - 這只是net.Conn或實現Reader和Writer接口的任何類型所必需的嗎?
編輯:第二個代碼段運行正常,沒有任何運行時錯誤,只是行爲不正確。我想知道那個n>0
檢查的效果是什麼,當我刪除它時表面下會發生什麼。
在['io.Reader'文檔](https://golang.org/pkg/io/#Reader)中詳細解釋了這個問題。 – JimB
@JimB文檔只推薦如何處理錯誤。第二個代碼片段運行正常,沒有檢查'n> 0',沒有報告運行時錯誤,但行爲很奇怪。 –
是的,你可以自由地做到這一點,但文檔顯示如何處理讀取數據和錯誤,以便你得到正確的行爲。 – JimB