go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现
在使用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實現并且擴展了接口,這些結構體是。
有疑問加站長微信聯系(非本文作者)
總結
以上是生活随笔為你收集整理的go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字段类型 sqoop_数据迁移工具Sqo
- 下一篇: aba会导致问题_肌肤缺水会导致哪些问题