Go語言的io輸入輸出流方式
Go語言的io輸入輸出流
Go語言的輸入輸出流不如其他語言那么直觀,由于是通過實現(xiàn)接口方法的隱式繼承所以比較抽象,今天具體介紹一下go語言的輸入輸出流。
go語言輸入輸出在io庫中
使用Reader接口,如下:
type Reader interface {
Read(p []byte) (n int, err error)
}Read方法從流中讀取長度為len(p)字節(jié)數(shù)據(jù)寫入p。也就是使用Read方法可以將流讀到p中,從而從流中到程序中。
當Read在讀取n > 0個字節(jié)后遭遇錯誤或者到達文件結尾時,會返回讀取的字節(jié)數(shù)。它可能會在該次調用返回一個非nil的錯誤,或者在下一次調用時返回0和該錯誤
io.Reader是一個基本的接口,用于表示數(shù)據(jù)的讀取。它只有一個方法Read。io.ReadFull從 io.Reader 中精確讀取 len(buf) 字節(jié)的數(shù)據(jù)。
Writer接口是寫入流接口,如下:
type Writer interface {
Write(p []byte) (n int, err error)
}Write方法將len(p) 字節(jié)數(shù)據(jù)從p寫入底層的數(shù)據(jù)流。
它會返回寫入的字節(jié)數(shù)(0 <= n <= len(p))和遇到的任何導致寫入提取結束的錯誤。Write必須返回非nil的錯誤,如果它返回的 n < len(p)。Write不能修改切片p中的數(shù)據(jù),即使臨時修改也不行。
io.Writer是一個基本的接口,用于表示數(shù)據(jù)的寫入。它只有一個方法Writeio.WriteString向io.Writer寫入字符串。
流復制,從輸出流復制到輸出流,如下:
func Copy(dst Writer, src Reader) (written int64, err error)
上述只是輸入輸出流的基本用法
還有許多繼承類,如下:
os.File同時實現(xiàn)了 io.Reader 和 io.Writerstrings.Reader實現(xiàn)了 io.Readerbufio.Reader/Writer分別實現(xiàn)了 io.Reader 和 io.Writerbytes.Buffer同時實現(xiàn)了 io.Reader 和 io.Writerbytes.Reader實現(xiàn)了 io.Readercompress/gzip.Reader/Writer分別實現(xiàn)了 io.Reader 和 io.Writercrypto/cipher.StreamReader/StreamWriter分別實現(xiàn)了 io.Reader 和 io.Writercrypto/tls.Conn同時實現(xiàn)了 io.Reader 和 io.Writerencoding/csv.Reader/Writer分別實現(xiàn)了 io.Reader 和 io.Writermime/multipart.Part實現(xiàn)了 io.Readernet/conn分別實現(xiàn)了 io.Reader 和 io.Writer(Conn接口定義了Read/Write)
上述包和結構體都實現(xiàn)了io.Reader方法,因此都可以使用Read方法將流讀取到程序中。
常用的類型有
os.File、strings.Reader、bufio.Reader/Writer、bytes.Buffer、bytes.Reader

可以看到直接獲取字節(jié)流的ReadFile方法也是調用了Read方法,如下:

在strings的也存在Reader接口,看源碼如下:

等等其他幾個接口也是如此,在未被封裝的時候都是調用Read方法。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Golang語言JSON解碼函數(shù)Unmarshal的使用
本文主要介紹了Golang語言JSON解碼函數(shù)Unmarshal的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
詳解Golang函數(shù)式選項(Functional?Options)模式
什么是函數(shù)式選項模式,為什么要這么寫,這個編程模式解決了什么問題呢?其實就是為了解決動態(tài)靈活的配置不同的參數(shù)的問題。下面通過本文給大家介紹Golang函數(shù)式選項(Functional?Options)模式的問題,感興趣的朋友一起看看吧2021-12-12

