ホームページ >バックエンド開発 >Golang >Go で同じ os.File に書き込んだ後に読み取るときに io.EOF を回避するにはどうすればよいですか?

Go で同じ os.File に書き込んだ後に読み取るときに io.EOF を回避するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-14 08:53:14259ブラウズ

How to Avoid `io.EOF` When Reading After Writing to the Same `os.File` in Go?

Go での同じ *os.File の読み取りと書き込み

問題の理解

Go で、OS を使用してファイルにデータを書き込む場合.File の場合、書き込み後、ファイル ポインタはファイルの末尾に移動します。その後、同じファイル ポインターからデータを読み取ろうとすると、ファイル ポインターがまだファイルの最後にあるため、即座に io.EOF (ファイルの終わり) エラーが発生します。

解決策

書き込み後に同じファイル ポインターからデータを正常に読み取るには、Seek メソッドを使用してファイル ポインターをファイルの先頭にリセットする必要があります。サンプル コードを変更する方法は次のとおりです。

// Seek to the beginning of the file before reading
_, err := f.Seek(0, 0)
if err != nil {
    fmt.Println("Error", err)
}

// Read 10 times
r := bufio.NewReader(f)
for i := 0; i < 10; i++ {
    str, _, err := r.ReadLine()
    if err != nil {
        if err == io.EOF {
            fmt.Println("Done")
            return
        }
        fmt.Println("Error", err)
    }
    fmt.Println("Read", string(str))
}

Seek メソッドを追加すると、読み取り前にファイル ポインターがファイルの先頭にリセットされ、後続の読み取り操作で書き込みデータを取得できるようになります。 io.EOF エラー。

以上がGo で同じ os.File に書き込んだ後に読み取るときに io.EOF を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。