スキップしてメイン コンテンツに移動

Go初心者のファイル操作入門

Go初心者のファイル操作入門

Go初心者のためのファイル操作入門

Goでファイルを扱う基本は、osパッケージとio/ioutilパッケージにあります。ファイル読み書きはプログラムの外部データを扱う際に頻繁に出てくるので、まずはシンプルな例から始めましょう。

os.Openとos.Createでファイルを開く

読み込み専用でファイルを開くにはos.Open、新規作成または上書きで開くにはos.Createを使います。戻り値は*os.Fileerrorです。

package main

import (
    "fmt"
    "os"
)

func main() {
    f, err := os.Open("input.txt")
    if err != nil {
        fmt.Println("open error:", err)
        return
    }
    defer f.Close()
    // ここでファイルを読み込む
}

ioutil.ReadFileで簡単に読み込む

小さめのファイルならioutil.ReadFileで一度に全内容を取得できます。戻り値は[]byteerrorです。

data, err := ioutil.ReadFile("input.txt")
if err != nil {
    fmt.Println("read error:", err)
    return
}
fmt.Println(string(data))

bufioを使った高速読み書き

大きなファイルやストリーム処理ではbufioを使うと効率的です。bufio.Readerbufio.Writerでバッファリングを行います。

reader := bufio.NewReader(f)
line, err := reader.ReadString('\n')
if err != nil {
    // EOF などを処理
}
fmt.Println(line)

Closeとエラー処理でリソース管理を徹底

ファイルを開いたら必ずCloseでリソースを解放します。deferを使うと関数終了時に自動でクローズされます。エラー処理は必ず行い、失敗時に適切にログを出力しましょう。

f, err := os.Create("output.txt")
if err != nil {
    fmt.Println("create error:", err)
    return
}
defer func() {
    if cerr := f.Close(); cerr != nil {
        fmt.Println("close error:", cerr)
    }
}()
_, err = f.WriteString("Hello, Go!")
if err != nil {
    fmt.Println("write error:", err)
}

この記事はAIによって作成されました。

コメント