...

パッケージ ioutil

import "io/ioutil"
概要
目次

概要 ▾

ioutil パッケージは I/O に役立つ関数を提供します。

変数

Discard は,すべての Write 呼び出しにおいて何もせずに成功する io.Writer です。

var Discard io.Writer = devNull(0)

func NopCloser

func NopCloser(r io.Reader) io.ReadCloser

NopCloser は,リーダー r をラップし, 何もしない Close メソッドを追加した ReadCloser を返します。

func ReadAll

func ReadAll(r io.Reader) ([]byte, error)

ReadAll は,r からエラーあるいは EOF が返ってくる読み込み,読み込んだデータを返します。 呼び出しが成功した場合, err == nil となり, err == EOF とはなりません。 なぜなら, ReadAll は定義上,ソースから EOF まで読み込むため, EOF をエラーとして報告する必要はないからです。

コード:

r := strings.NewReader("Go is a general-purpose language designed with systems programming in mind.")

b, err := ioutil.ReadAll(r)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s", b)

出力:

Go is a general-purpose language designed with systems programming in mind.

func ReadDir

func ReadDir(dirname string) ([]os.FileInfo, error)

ReadDir は,dirname をディレクトリ名とするディレクトリを読み込み, ファイル名でソートしたディレクトリの項目を返します。

コード:

files, err := ioutil.ReadDir(".")
if err != nil {
    log.Fatal(err)
}

for _, file := range files {
    fmt.Println(file.Name())
}

func ReadFile

func ReadFile(filename string) ([]byte, error)

ReadFile は,filename をファイル名とするファイルを読み込み,その内容を返します。 呼び出しが成功した場合, err == nil となり, err == EOF とはなりません。 なぜなら, ReadFile はファイル全体を読み込むため, EOF をエラーとして報告する必要はないからです。

コード:

content, err := ioutil.ReadFile("testdata/hello")
if err != nil {
    log.Fatal(err)
}

fmt.Printf("File contents: %s", content)

出力:

File contents: Hello, Gophers!

func TempDir

func TempDir(dir, prefix string) (name string, err error)

TempDir は新しい一時ディレクトリをディレクトリ dir に作成します。 その新しいディレクトリ名 name は prefix で始まり,返り値で確かめられます。 dir が空文字列の場合, TempDir はデフォルトの一時ファイルディレクトリを使います。 (os.TempDir 参照). 複数のプログラムが同時に TempDir を呼び出しても, 同じディレクトリが選ばれることはありません。 不要になったディレクトリを削除するのは呼び出し元の責任です。

コード:

content := []byte("temporary file's content")
dir, err := ioutil.TempDir("", "example")
if err != nil {
    log.Fatal(err)
}

defer os.RemoveAll(dir) // クリーンアップ

tmpfn := filepath.Join(dir, "tmpfile")
if err := ioutil.WriteFile(tmpfn, content, 0666); err != nil {
    log.Fatal(err)
}

func TempFile

func TempFile(dir, pattern string) (f *os.File, err error)

TempFile は新しい一時ファイルをディレクトリ dir に作成し, 読み書き用にファイルをオープンし, *os.File を返します。 ファイル名は pattern のあとにランダムな文字列を付け足して生成します。 pattern に "*" が含まれている場合,ランダム文字列は最後の "*" と置換されます。 dir が空文字列の場合, TempFile はデフォルトの一時ファイルディレクトリを使います。 (os.TempDir 参照)。 複数のプログラムが同時に TempFile を呼び出しても, 同じファイルが選ばれることはありません。呼び出し元は f.Name() でファイルのパス名を確認できます。 不要になったファイルを削除するのは呼び出し元の責任です。

コード:

content := []byte("temporary file's content")
tmpfile, err := ioutil.TempFile("", "example")
if err != nil {
    log.Fatal(err)
}

defer os.Remove(tmpfile.Name()) // クリーンアップ

if _, err := tmpfile.Write(content); err != nil {
    log.Fatal(err)
}
if err := tmpfile.Close(); err != nil {
    log.Fatal(err)
}

例 (Suffix)

コード:

content := []byte("temporary file's content")
tmpfile, err := ioutil.TempFile("", "example.*.txt")
if err != nil {
    log.Fatal(err)
}

defer os.Remove(tmpfile.Name()) // クリーンアップ

if _, err := tmpfile.Write(content); err != nil {
    tmpfile.Close()
    log.Fatal(err)
}
if err := tmpfile.Close(); err != nil {
    log.Fatal(err)
}

func WriteFile

func WriteFile(filename string, data []byte, perm os.FileMode) error

WriteFile は,filename をファイル名とするファイルにデータを書き込みます。 ファイルが存在しない場合, WriteFile はperm パーミッションでファイルを作成します。 ファイルが存在する場合, WriteFile は書き込む前にファイルの中身を空にします。

コード:

message := []byte("Hello, Gophers!")
err := ioutil.WriteFile("testdata/hello", message, 0644)
if err != nil {
    log.Fatal(err)
}