中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang中的read會發生阻塞嗎

發布時間:2020-06-17 10:23:30 來源:億速云 閱讀:1179 作者:Leah 欄目:編程語言

golang中的read會發生阻塞嗎?可能很多人對此沒有深入了解過,故而小編總結了這篇文章,通過這文章的講解,希望你能夠收獲更多知識。

Go語言中Reader接口定義了一個Read操作,實現了Reader接口的都有Read這個函數。

接口的定義如下:

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有進一步的了解嗎?如果還想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

松原市| 长顺县| 武山县| 韶关市| 昌都县| 镇康县| 黄平县| 广水市| 成武县| 大丰市| 新民市| 芜湖市| 西乌珠穆沁旗| 张家川| 德化县| 庆云县| 阳高县| 凤庆县| 杨浦区| 兴文县| 乡宁县| 延津县| 德钦县| 栾城县| 长葛市| 周口市| 百色市| 安乡县| 西昌市| 泾源县| 巴马| 台南市| 宜川县| 凌云县| 如皋市| 黔东| 铜川市| 新泰市| 隆尧县| 阳西县| 巴彦淖尔市|