import "io"

このパッケージは、I/Oプリミティブへの基本的なインタフェースを提供します。主な役割は、osパッケージ内で定義されているような他のプリミティブを、機能を概念的に表す共通インタフェースへラップすることです。その上で、関連するプリミティブがいくつか追加されています。

パッケージファイル

io.go multi.go pipe.go

変数

ErrShortBufferは、与えたバッファより、readが大きなバッファを必要としていることを表します。

var ErrShortBuffer os.Error = &Error{"short buffer"}

ErrShortWriteは、要求したバイト数よりwriteが処理したサイズが少ないが、その原因が不明であることを表します。

var ErrShortWrite os.Error = &Error{"short write"}

ErrUnexpectedEOFは、固定サイズのブロックまたはデータ構造を読み込んでいる途中でos.EOFに達したことを表します。

var ErrUnexpectedEOF os.Error = &Error{"unexpected EOF"}

Copy関数

func Copy(dst Writer, src Reader) (written int64, err os.Error)

Copyは、srcからdstへ、srcがEOFに達するか、エラーが発生するまでコピーします。この関数はコピーしたバイト数と、エラーがある時はエラーを返します。

dstがReaderFromインタフェースを実装しているときは、dst.ReadFrom(src)を使ってコピーが行われます。それ以外で、かつsrcがWriterToインタフェースを実装しているときは、src.WriteTo(dst)を使ってコピーが行われます。

Copyn関数

func Copyn(dst Writer, src Reader, n int64) (written int64, err os.Error)

Copynは、srcからdstへnバイト(またはエラーが起きるまで)コピーします。この関数はコピーしたバイト数と、エラーがある時はエラーを返します。

dstがReaderFromインタフェースを実装しているときは、dst.ReadFrom(src)を使ってコピーが行われます。

ReadAtLeast関数

func ReadAtLeast(r Reader, buf []byte, min int) (n int, err os.Error)

ReadAtLeastは、rからbufへminバイト数以上読み込みます。読み込まれたバイト数がminより少ないときはコピーしたバイト数とエラーを返します。1バイトも読み込めなかったときだけos.EOFが返されます。何バイトか読み込んだあと、minに達する前にEOFが発生すると、ReadAtLeastはErrUnexpectedEOFを返します。bufの長さよりminの方が大きいとき、ReadAtLeastはErrShortBufferを返します。

ReadFull関数

func ReadFull(r Reader, buf []byte) (n int, err os.Error)

ReadFullは、rからbufに正確にlen(buf)バイト読み込みます。読み込まれたバイト数がバッファサイズより少ないときはコピーしたバイト数とエラーを返します。1バイトも読み込めなかったときだけos.EOFが返されます。何バイトか読み込んだあと、全バイト数を読み込む前にEOFが発生すると、ReadFullはErrUnexpectedEOFを返します。

WriteString関数

func WriteString(w Writer, s string) (n int, err os.Error)

WriteStringは、wに文字列sの内容を書きこみます。wはバイト配列を受け取ります。

Closer型

Closerは、基本的なメソッドであるCloseをラップしたインタフェースです。

type Closer interface {
    Close() os.Error
}

Error型

Errorは、予期しないI/Oの振舞いを表します。

type Error struct {
    os.ErrorString
}

PipeReader型

PipeReaderは、パイプの読み込み側です。

type PipeReader struct {
    // contains unexported fields
}

Pipe関数

func Pipe() (*PipeReader, *PipeWriter)

Pipeは、メモリ内に同期パイプを作成します。これはio.Readerを必要としているコードと、io.Writerを必要としているコード間を接続します。片方の読み込みは、もう一方の書き込みに対応し、データのコピーは二者間でバッファリングされることなくダイレクトに行われます。

(*PipeReader) Close関数

func (r *PipeReader) Close() os.Error

Closeは、リーダをクローズします。以降のもう一方のパイプへの書き込みは、エラーos.EPIPEを返します。

(*PipeReader) CloseWithError関数

func (r *PipeReader) CloseWithError(err os.Error) os.Error

CloseWithErrorは、リーダをクローズします。以降のもう一方のパイプへの書き込みは、エラーerrを返します。

(*PipeReader) Read関数

func (r *PipeReader) Read(data []byte) (n int, err os.Error)

Readは、標準的なReadインタフェースを実装しています。パイプからデータを読み込むとき、読み込むデータの準備ができたか、もしくは書き込み側がクローズされるまでブロックします。書き込み側がエラーによりクローズされると、そのエラーがerrに返されます。それ以外のときerrはnilです。

PipeWriter型

PipeWriterは、パイプの一方へ書き込みます。

type PipeWriter struct {
    // contains unexported fields
}

(*PipeWriter) Close関数

func (w *PipeWriter) Close() os.Error

Closeは、ライターをクローズします。以降のもう一方のパイプからの読み込みは、0バイトとエラーにos.EOFを返します。

(*PipeWriter) CloseWithError関数

func (w *PipeWriter) CloseWithError(err os.Error) os.Error

CloseWithErrorは、ライターをクローズします。以降のもう一方のパイプからの読み込みは、エラーerrを返します。

(*PipeWriter) Write関数

func (w *PipeWriter) Write(data []byte) (n int, err os.Error)

Writeは、標準的なWriteインタフェース実装しています。これはパイプにデータを書き込むとき、リーダがすべてのデータを読み込んだか、もしくは読み込み側がクローズされるまでブロックします。読み込み側がエラーによりクローズされると、そのエラーがerrに返されます。それ以外のときerrはos.EPIPEです。

ReadByter型

ReadByterは、ReadByteメソッドをラップしたインタフェースです。

ReadByteは、入力から次の1バイトを読み込んで返します。読み込むバイトデータの準備が出来ていないときはerrに値がセットされます。

type ReadByter interface {
    ReadByte() (c byte, err os.Error)
}

ReadCloser型

ReadCloserは、基本的なメソッドであるReadとCloseをグルーピングしたインタフェースです。

type ReadCloser interface {
    Reader
    Closer
}

ReadSeeker型

ReadSeekerは、基本的なメソッドであるReadとSeekをグルーピングしたインタフェースです。

type ReadSeeker interface {
    Reader
    Seeker
}

ReadWriteCloser型

ReadWriteCloserは、基本的なメソッドであるRead、Write、Closeをグルーピングしたインタフェースです。

type ReadWriteCloser interface {
    Reader
    Writer
    Closer
}

ReadWriteSeeker型

ReadWriteSeekerは、基本的なメソッドであるRead、Write、Seekをグルーピングしたインタフェースです。

type ReadWriteSeeker interface {
    Reader
    Writer
    Seeker
}

ReadWriter型

ReadWriterは、基本的なメソッドであるReadとWriteをグルーピングしたインタフェースです。

type ReadWriter interface {
    Reader
    Writer
}

Reader型

Readerは、基本的なメソッドであるReadをラップしたインタフェースです。

Readは、pにlen(p)バイト読み込みます。これは読み込んだバイト数(0 <= n <= len(p))と発生したエラーを返します。Readがn < len(p)を返したとしても、この呼出で使える全スクラッチスペースを使ってpに読み込まれたのかもしれません。また読み込み可能なデータがあってもlen(p)より少ないときは、Readはそれ以上のデータを待ってブロックするようなことはせずリターンします。

入力ストリームの終わりに達すると、Readは0, os.EOFを返します。Readは1バイト以上読み込んだときにもエラーを返すことがあります。特に、入力の最期まで読み込んだときにはn > 0, os.EOFが返されます。

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

LimitReader関数

func LimitReader(r Reader, n int64) Reader

LimitReaderは、rからnバイト後ろのos.EOFまで読み込みを行うReaderを返します。

MultiReader関数

func MultiReader(readers ...Reader) Reader

MultiReaderは、与えた入力readerの論理的連結であるReaderを返します。これらは、順番に読み出されます。すべての入力から読み込み終えると、Readはos.EOFを返します。

ReaderAt型

ReaderAtは、基本的なメソッドであるReadAtをラップしたインタフェースです。

ReadAtは、ラップしたデータストリームの開始オフセットoffからpへlen(p)バイト読み込みます。これは読み込んだバイト数(0 <= n <= len(p))と発生したエラーを返します。

ReadAtがn < len(p)を返したとしても、この呼出で使える全スクラッチスペースを使ってpに読み込まれたのかもしれません。また読み込み可能なデータがあってもlen(p)より少ないときは、ReadAtは全データを読み込むか、またはエラーが発生するまでブロックします。

入力ストリームの終わりに達すると、ReadAtは0, os.EOFを返します。ReadAtは1バイト以上読み込んだときにもエラーを返すことがあります。特に、入力の最期まで読み込んだときにはn > 0, os.EOFが返されます。

type ReaderAt interface {
    ReadAt(p []byte, off int64) (n int, err os.Error)
}

ReaderFrom型

ReaderFromは、ReadFromメソッドをラップしたインタフェースです。

type ReaderFrom interface {
    ReadFrom(r Reader) (n int64, err os.Error)
}

SectionReader型

SectionReaderは、ラップしたReaderAtのセクションに対するRead、Seek、ReadAtを実装しています。

type SectionReader struct {
    // contains unexported fields
}

NewSectionReader型

func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader

NewSectionReaderは、rを開始オフセットoffから、nバイト後のos.EOFまで読み込むSectionReaderを返します。

(*SectionReader) Read関数

func (s *SectionReader) Read(p []byte) (n int, err os.Error)

(*SectionReader) ReadAt関数

func (s *SectionReader) ReadAt(p []byte, off int64) (n int, err os.Error)

(*SectionReader) Seek関数

func (s *SectionReader) Seek(offset int64, whence int) (ret int64, err os.Error)

(*SectionReader) Size関数

func (s *SectionReader) Size() int64

Sizeは、このセクションのサイズをバイト数で返します。

Seeker型

Seekerは、基本的なメソッドであるSeekをラップしたインタフェースです。

Seekは、次の読み込みまたは書き込みのオフセット値としてoffsetを設定します。offsetは、whenceの値によって次のように解釈されます。0のときはファイルの先頭からの相対位置、1のときはカレントの位置からの相対位置、2のときはファイルの終りからの相対位置です。Seekは、新しいオフセット値とエラーがあればエラーを返します。

type Seeker interface {
    Seek(offset int64, whence int) (ret int64, err os.Error)
}

WriteCloser型

WriteCloserは、基本的なメソッドであるWriteとCloseをグルーピングしたインタフェースです。

type WriteCloser interface {
    Writer
    Closer
}

WriteSeeker型

WriteSeekerは、基本的なメソッドであるWriteとSeekをグルーピングしたインタフェースです。

type WriteSeeker interface {
    Writer
    Seeker
}

Writer型

Writerは、基本的なメソッドであるWriteをラップしたインタフェースです。

Writeは、ラップしているデータストリームにpをlen(p)バイト書きこみます。これは書き込んだpのバイト数(0 <= n <= len(p))と、発生したエラー(途中で書き込みを停止した理由)を返します。Writeが返すnの値がn < len(p)のときは、エラーとしてnil以外が必ず返されます。

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

MultiWriter関数

func MultiWriter(writers ...Writer) Writer

MultiWriterは、Unixのtee(1)コマンドのように、書き込まれた内容を、与えられたすべてのwriter書き込みを行うwriterを作成します。

WriterAt型

WriterAtは、基本的なメソッドであるWriteAtをラップしたインタフェースです。

WriteAtは、ラップしているデータストリームにpをオフセット位置offからlen(p)バイト書きこみます。これは書き込んだpのバイト数(0 <= n <= len(p))と、発生したエラー(途中で書き込みを停止した理由)を返します。WriteAtが返すnの値がn < len(p)のときは、エラーとしてnil以外が必ず返されます。

type WriterAt interface {
    WriteAt(p []byte, off int64) (n int, err os.Error)
}

WriterTo型

WriterToは、WriteToメソッドをラップしたインタフェースです。

type WriterTo interface {
    WriteTo(w Writer) (n int64, err os.Error)
}