亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Go語言中io包核心接口怎么用

發布時間:2021-12-16 15:06:07 來源:億速云 閱讀:212 作者:小新 欄目:開發技術

小編給大家分享一下Go語言中io包核心接口怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Reader

io.Reader接口定義了 Read 方法,用于讀取數據到字節數組中:

  • 入參:字節數組 p,會將數據讀入到 p 中

  • 返回值:本次讀取的字節數 n,以及遇到的錯誤 err

type Reader interface {
	Read(p []byte) (n int, err error)
}

方法功能詳解

  1. 方法讀取數據寫入到字節數組 p 中,由于 p 是有大小的,所以一次至多讀取 len(p) 個字節

  2. 方法返回讀取的數據字節數 n(0 <= n <= len(p)),以及讀取過程中遇到的 error

  3. 即使一次調用讀取到的數據小于 len(p),也可能會占用整個字節數組 p 作為暫存空間

  4. 如果數據源的數據量小于 len(p) 個字節,方法只會讀取當前可用數據,不會等待更多數據的到來

何時返回error

  1. 在成功讀取了 n(n>0)個字節后,如果產生了 error 或者 讀到文件末尾 (end-of-file),本次調用必須要返回讀取的字節數 n,但對于err 的值,可以選擇在本次直接返回 err(err!=nil),或者在下次調用的時候再返回 err (n=0, err!=nil)。常見的一個例子就是,讀取到n個字節后到達文件末尾(EOF),此時可以返回 err=EOF 或者 err=nil,下次調用返回 n=0,err=EOF。

  2. 調用者需要注意,每次調用后,如果 n>0,應該先處理數據,再考慮 err 是否為 nil。因為上一點已經指出,如果讀取到 n>0 個字節后遇到 error,會同時返回 n>0 和 err!=nil,此時就需要先處理數據再考慮 err。

方法實現和調用需注意

  1. 如果想要實現該方法,不推薦同時返回 n=0 和 err=nil,除非 len(p)=0

  2. 如果調用該該方法返回 n=0 和 err=nil,可以認為什么都沒有發生,不能認為是讀到文件末尾了(end-of-file)

  3. 實現該方法后,一定不要持有字節數組p (保留下地址做他用)

Writer

io.Writer接口定義了 Write 方法,用于寫數據到文件中

  • 入參:字節數組 p,會將 p 中的數據寫入到文件中

  • 返回值:成功寫入完成的字節數 n,以及遇到的錯誤 err

type Writer interface {
	Write(p []byte) (n int, err error)
}

方法功能詳解

  1. 該方法將 p 中的數據寫到文件中

  2. 方法返回成功寫入的字節數 n(0 <= n <= len(p)),以及寫入過程中遇到的錯誤 err

  3. 如果 n<len(p),方法必須返回 err!=nil

  4. 方法一定不能修改字節數組 p,即使是臨時修改也不被允許

方法實現需注意

實現該方法后,一定不要持有字節數組p,只是用來讀取數據

Closer

io.Closer接口定義了 Close 方法,該方法用于關閉連接。

方法實現需注意

第一次調用該方法后,再次調用該方法應該產生什么行為,該接口沒有定義,依賴實現方法自定義。

type Closer interface {
	Close() error
}

Seeker

io.Seeker接口定義了 Seek 方法,該方法用于指定下次讀取或者寫入時的偏移量

入參:計算新偏移量的起始值 whence, 基于whence的偏移量offset

返回值:基于 whence 和 offset 計算后新的偏移量值,以及可能產生的錯誤

type Seeker interface {
	Seek(offset int64, whence int) (int64, error)
}

方法功能詳解

io包中定義了如下三種 whence

const (
	SeekStart   = 0 // 基于文件開始位置
	SeekCurrent = 1 // 基于當前偏移量 
	SeekEnd     = 2 // 基于文件結束位置
)

如果計算后新的偏移量,在文件起始位置之前,返回 error!=nil

任意正數的偏移量都是合法的,但是對數據源如何進行I/O操作,依賴具體的實現方法

組合接口

在go語言中,可以利用接口的組合,來囊括其他接口中的方法,類似于定義了一個父接口,可以包含多個子接口。如果一個 struct 實現了所有子接口的方法,也就相當于實現了父接口。小接口 + 接口組合的方式,很大程度上增加了程序的靈活性,在我們自己業務開發過程中,可以借鑒這種做法。

針對上面四個最小粒度的接口,io包定義了如下幾種組合接口:

// ReadWriter 是 Read 和 Write 方法的組合
type ReadWriter interface {
	Reader
	Writer
}

// ReadCloser 是 Read 和 Close 方法的組合
type ReadCloser interface {
	Reader
	Closer
}

// WriteCloser 是 Write 和 Close 方法的組合
type WriteCloser interface {
	Writer
	Closer
}

// ReadWriteCloser 是 Read、Write 和 Close 方法的組合
type ReadWriteCloser interface {
	Reader
	Writer
	Closer
}

// ReadSeeker 是 Read 和 Seek 方法的組合
type ReadSeeker interface {
	Reader
	Seeker
}

// WriteSeeker 是 Write 和 Seek 方法的組合
type WriteSeeker interface {
	Writer
	Seeker
}

// ReadWriteSeeker 是 Read、Write 和 Seek 方法的組合
type ReadWriteSeeker interface {
	Reader
	Writer
	Seeker
}

以上是“Go語言中io包核心接口怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

永安市| 怀仁县| 六安市| 两当县| 鄂伦春自治旗| 东乡县| 水富县| 巧家县| 巨鹿县| 大安市| 纳雍县| 资溪县| 宁安市| 孝感市| 石河子市| 柳州市| 贡山| 滨州市| 济源市| 乌鲁木齐市| 临朐县| 边坝县| 侯马市| 丰镇市| 闸北区| 额济纳旗| 和龙市| 富裕县| 二连浩特市| 将乐县| 繁峙县| 扎赉特旗| 曲麻莱县| 敦煌市| 陆丰市| 胶州市| 铜山县| 丽江市| 莆田市| 镇沅| 奉贤区|