Go語言中的io.Reader和io.Writer以及它們的實現

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

在使用Go語言的過程中,無論你是實現web應用程式,還是控制台輸入輸出,又或者是網路操作,不可避免的會遇到IO操作,使用到io.Reader和io.Writer介面。也也許對這兩個介面和相關的一些介面很熟悉了,但是你腦海裡確很難形成一個對io介面的繼承關係整天的概貌,原因在於godoc預設並沒有像javadoc一樣顯示官方庫繼承關係,這導致了我們對io介面的繼承關係記憶不深,在使用的時候還經常需要翻文檔加深記憶。本文試圖梳理清楚Go io介面的繼承關係,提供一個io介面的全貌。

io介面回顧

首先我們回顧一下幾個常用的io介面。標準庫的實現是將功能細分,每個最小粒度的功能定義成一個介面,然後介面可以組成成更多功能的介面。

最小粒度的介面

typeReaderinterface{ Read(p []byte) (nint, err error)}
typeWriterinterface{ Write(p []byte) (nint, err error)}
typeCloserinterface{ Close() error}
typeSeekerinterface{ Seek(offset int64, whenceint) (int64, error)}
typeReaderFrominterface{ ReadFrom(r Reader) (n int64, err error)}
typeWriterTointerface{ WriteTo(w Writer) (n int64, err error)}
typeReaderAtinterface{ ReadAt(p []byte, offint64) (nint, err error)}
typeWriterAtinterface{ WriteAt(p []byte, offint64) (nint, err error)}
typeByteReaderinterface{ ReadByte() (byte, error)}
typeByteWriterinterface{ WriteByte(c byte) error}

ByteScanner比ByteReader多了一個 UnreadByte 方法。

typeByteScannerinterface{ ByteReader UnreadByte() error}
typeRuneReaderinterface{ ReadRune() (r rune, sizeint, err error)}
typeRuneScannerinterface{ RuneReader UnreadRune() error}

組合介面

Go標準庫還定義了一些由上面的單一職能的介面組合而成的介面。

typeReadCloserinterface{ Reader Closer}
typeReadSeekerinterface{ Reader Seeker}
typeReadWriterinterface{ Reader Writer}
typeReadWriteCloserinterface{ Reader Writer Closer}
typeReadWriteSeekerinterface{ Reader Writer Seeker}
typeWriteCloserinterface{ Writer Closer}
typeWriteSeekerinterface{ Writer Seeker}

從它們的定義上可以看出,它們是最小粒度的組合。

最小介面的擴充

有些結構體struct實現並且擴充了介面,這些結構體是。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.