0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

7.5 インタフェースとは に関連する考察

Posted at

インタフェースとはのチャプターではio.Readerとio.Writerを使った実装についての説明が出てくる。

io.Reader

io.Readerは以下のように超シンプルにRead()を持つだけ

type Reader interface {
	Read(p []byte) (n int, err error)
}
  • len(p)バイトまでをpに読み込み、読み込んだバイト数nとエラーerrを返す
  • n > 0のとき、errはnilかio.EOFのどちらか
  • 読み取り側がストリームの終端に到着すると、errにio.EOFが返される
  • (n==0 && err==nil)の返却は禁止。なぜなら呼び出し側が無限ループになってしまうので
  • Read()を実行しても(0, io.EOF)が返ってくることが判明している場合は、ブロックせずにそれを返すことはOK
    • 内部に読み取る元データのサイズと現在のオフセットを持っているので、そこから最後に到達していると判断している場合など
  • errがnilなら少なくとも1バイトは読み込まれていることが保証される

io.Writer

io.WriterもWrite()を持つだけ

type Writer interface {
	Write(p []byte) (n int, err error)
}
  • pから最大len(p)バイトを書き出し、書いたバイト数nとエラーerrを返す
  • n < len(p)になった場合、errは必ずnon-nil
  • n == len(p)かつerr == nilなら完全に成功
  • errがnon-nilでも n > 0なら部分的に書き込みは成功している
  • WriterにはEOFの概念はない
  • n == 0 かつ err == nil は仕様上禁止
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?