首頁 > 後端開發 > Golang > 主體

golang read會阻塞麼

(*-*)浩
發布: 2019-12-17 10:34:25
原創
4582 人瀏覽過

golang read會阻塞麼

Go語言中Reader介面定義了一個Read操作,實作了Reader介面的都有Read這個函數。           (建議學習:go

介面的定義如下:

type Reader interface {
        Read(p []byte) (n int, err error)
}
登入後複製

一次Read呼叫最多讀取len( p)位元組的資料到緩衝區p

n表示這次實際讀取到位元組數,(0 <= n <= len(p))

err表示這次讀取操作的報錯(如果有的話,沒有則是nil)

即使讀取到的位元組數n小於len(p),在函數呼叫過程中呼叫主體也可能使用全部的p的空間(不知道這個說明是想表達什麼)

當read到資料的時候,即使不夠len(p)(此時IO快取中沒有資料了),Read操作通常會直接返回獲取到的資料而不是繼續等待IO快取中到達更多的資料

當Read操作在成功讀取到n位元組資料後遇到一個錯誤或檔案的末尾,它將會傳回讀取的n位元組數據,然後err的回傳可能有兩種操作:

在本次Read操作的時候回傳n(>0)和err(非nil)

或本次Read操作返回n(>0)和nil,下次呼叫的時候再回傳0和err(非nil)

這兩種操作都是可能的,所以呼叫者永遠應該先按照n>0來判定是否有數據返回,而不是先判定err是否為nil

舉個例子說明,當某次調用到達文件末尾並且還讀取到了n位元組資料的時候,Reader的實作可能有兩種方式:

目前呼叫回傳n和EOF error

目前呼叫回傳n和nil,下次呼叫回傳0和EOF

Read的實作不應該回傳0和nil,也就是當回傳0的時候就應該回傳一個非nil的error,除非緩衝空間的大小為0,然後呼叫者應該忽略呼叫0和nil這種回傳值組合,當作什麼都沒發生,特別強調一下,這個回傳並不表示EOF了

以上是golang read會阻塞麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板