Go
golang

Golangのファイル入出力関係パッケージまとめ

More than 1 year has passed since last update.

はじめに

Golangのファイル入出力について、各インターフェース、構造体を俯瞰するために一度整理しました。俯瞰できればちゃんと整理されてるみたいですね。

クラス図(のようなもの)

※クラス図はあんまり分かっていないので、誤りあったらごめんなさい。(つっこみください)

ダウンロード (4).png

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