はじめに
Golangのファイル入出力について、各インターフェース、構造体を俯瞰するために一度整理しました。俯瞰できればちゃんと整理されてるみたいですね。
クラス図(のようなもの)
※クラス図はあんまり分かっていないので、誤りあったらごめんなさい。(つっこみください)
ioパッケージ
Reader/Writerのinterfaceを定義。 また、File以外の対象に対してのReader/Writer(struct)が定義されている。
-
type Reader interface
- Read(p []byte) (n int, err error)
-
type Writer interface
- Write(p []byte) (n int, err error)
osパッケージ
File構造体を定義。 File構造体はio.Readerおよびio.Writerを実装している。
-
type File struct
- func (f *File) Read(b []byte) (n int, err error)
- func (f *File) Write(b []byte) (n int, err error)
bufioパッケージ
バッファを用いたReader/Writerを定義。Newメソッドにより、 他のio.Reader/io.Writerを元に生成する。
-
type Reader struct
- func NewReader(rd io.Reader) *Reader
- func (b *Reader) Read(p []byte) (n int, err error)
- func (b *Reader) ReadByte() (byte, error)
- func (b *Reader) ReadBytes(delim byte) ([]byte, error)
- func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
- func (b *Reader) ReadRune() (r rune, size int, err error)
- func (b *Reader) ReadSlice(delim byte) (line []byte, err error)
- func (b *Reader) ReadString(delim byte) (string, error)
-
type Writer struct
- func NewWriter(w io.Writer) *Writer
- func (b *Writer) Write(p []byte) (nn int, err error)
- func (b *Writer) WriteByte(c byte) error
- func (b *Writer) WriteRune(r rune) (size int, err error)
- func (b *Writer) WriteString(s string) (int, error)
- func (b *Writer) Flush() error
-
type Scanner struct
- func NewScanner(r io.Reader) *Scanner
- func (s *Scanner) Scan() bool
- func (s *Scanner) Text() string
ioutilパッケージ
ファイルごと読み込み/書き込みなど一括処理を簡単に実施するためのutils。 Reader/Writerの存在も隠蔽されていたりする。
- func ReadAll(r io.Reader) ([]byte error)
- func ReadFile(filename string) ([]byte, error)
- func WriteFile(filename string, data []byte, perm os.FileMode) error