ホームページ >バックエンド開発 >Golang >同じ Go ファイル ポインターに書き込んだ後に読み取ると何も返されないのはなぜですか?

同じ Go ファイル ポインターに書き込んだ後に読み取ると何も返されないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 03:56:09601ブラウズ

Why Does Reading After Writing to the Same Go File Pointer Return Nothing?

Go での同じファイルの読み取りと書き込み

Go では、os.File タイプを使用するとファイルの操作が簡単になります。ただし、同じファイル ポインターに対して読み取りと書き込みを行おうとすると、問題が発生する可能性があります。この記事では、このようなシナリオに対処し、解決策を示します。

問題:

データをファイルに書き込んで、同じファイルから読み取ろうとしています。ポインタ。ただし、読み取り操作は何も返しません。

コード:

func main() {
    filename := "test.txt"
    f, _ := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm)
    defer os.Remove(filename)

    // Write 10 times
    for i := 0; i < 10; i++ {
        fmt.Fprintf(f, "test%d\n", i)
    }

    // 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))
    }
}

問題:

提供されたコードでは、書き込み操作の後、ファイル ポインタはファイルの末尾に移動します。読み取り操作を試行すると、すぐにファイルの終わりに到達し、io.EOF エラーが発生します。

解決策:

この問題を解決するには、次の手順を実行します。ファイル ポインターを読み取る前に、ファイル ポインターを手動で先頭にシークして戻す必要があります。

_, err := f.Seek(0, 0)
if err != nil {
    fmt.Println("Error", err)
}

このコード スニペットは、読み取りの前に Seek 操作を追加します。ループ。ファイル ポインタをファイルの先頭に設定し、後続の読み取り操作で書き込まれたデータを取得できるようにします。

以上が同じ Go ファイル ポインターに書き込んだ後に読み取ると何も返されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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