【Go言語】ファイルを一行ずつ読み込む方法。bufioパッケージのNewScanner, Scan関数を使え

Go言語でファイルを1行ずつ読み込む方法です。

ファイルを開いてループ処理で1行ずつ処理したい場合ってありますよね?今回はそんなケースで利用できるコードです。

ファイルを一行ずつ読み込む方法

ファイルを読み込むためにbufioパッケージのbufio.NewScanner関数を使用して、ファイルオブジェクトをスキャナーに変換します。

bufio.Scanメソッドを使用することでファイルから1行ずつ読み込みます。ここがポイントです。あとは単純にfor文でループ処理として扱えばOKです。

Scanメソッドは読み込んだ1つの行を文字列として返します。最終行まで読み込みが完了するとScanメソッドはfalseを返します。

ということでGoでファイルを1行ずつ処理するサンプルコードです


package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    // ファイルを開く
    file, err := os.Open("filename.txt")
    if err != nil {
        fmt.Println("ファイルが開けませんでした。")
        return
    }
    defer file.Close()

    // スキャナーを作成
    scanner := bufio.NewScanner(file)

    // ファイルを1行ずつ読み込む
    for scanner.Scan() {
        line := scanner.Text()
        fmt.Println(line)
    }

    // エラーが発生した場合の処理
    if err := scanner.Err(); err != nil {
        fmt.Println("読み込みエラーが発生しました。")
        return
    }
}

deferでファイルをcloseするのをお忘れなく。メモリが無駄になっちゃうからね。

エラーハンドリングとしてscanner.Err関数を使用してエラーを取得できます。