Maison >développement back-end >Golang >Comment éviter « io.EOF » lors de la lecture après avoir écrit dans le même « os.File » dans Go ?

Comment éviter « io.EOF » lors de la lecture après avoir écrit dans le même « os.File » dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 08:53:14265parcourir

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

Lecture et écriture dans le même fichier *os.File dans Go

Comprendre le problème

Dans Go, lors de l'écriture de données dans un fichier à l'aide d'OS .Fichier, le pointeur de fichier est déplacé à la fin du fichier après l'écriture. Par la suite, lorsque vous tentez de lire des données à partir du même pointeur de fichier, une erreur immédiate io.EOF (End of File) est rencontrée car le pointeur de fichier est toujours à la fin du fichier.

Résolution

Pour réussir à lire les données du même pointeur de fichier après l'écriture, vous devez réinitialiser le pointeur de fichier au début du fichier à l'aide de la méthode Seek. Voici comment modifier l'exemple de code :

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

En ajoutant la méthode Seek, le pointeur de fichier est réinitialisé au début du fichier avant la lecture, permettant aux opérations de lecture ultérieures de récupérer les données écrites sans provoquer une erreur io.EOF.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn