Maison >développement back-end >Golang >Comment lire le contenu d'un fichier texte dans Go ?

Comment lire le contenu d'un fichier texte dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 15:13:02509parcourir

How to Read the Contents of a Text File in Go?

Comment lire un fichier texte dans Go

Lorsque vous travaillez avec des fichiers texte dans Go, il est essentiel de comprendre comment lire leur contenu. Cependant, la question que vous avez posée : "Comment lire un fichier texte ? [dupliquer]", suggère que cette tâche peut être plus complexe qu'il n'y paraît.

Le code que vous avez fourni :

package main

import (
    "fmt"
    "os"
    "log"
)

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Print(file)
}

lit avec succès le fichier, mais le résultat est simplement la valeur du pointeur du descripteur de fichier (*os.File). Pour réellement obtenir le contenu du fichier, vous devez utiliser l'une des techniques suivantes :

Lecture du contenu du fichier en mémoire

Pour les petits fichiers, l'approche la plus simple consiste à utiliser io/ioutil.ReadAll pour charger l'intégralité du fichier en mémoire.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    b, err := io.ReadAll(file)
    fmt.Print(b)
}

Lecture par morceaux

Pour les fichiers plus volumineux, la lecture par morceaux peut être plus efficace en termes de mémoire.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    buf := make([]byte, 32*1024)

    for {
        n, err := file.Read(buf)

        if n > 0 {
            fmt.Print(buf[:n])
        }

        if err == io.EOF {
            break
        }
        if err != nil {
            log.Printf("read %d bytes: %v", n, err)
            break
        }
    }
}

Utilisation d'un scanner

Enfin, vous pouvez utiliser le package bufio pour créer un scanner qui lit le fichier en jetons, en avançant en fonction d'un séparateur (par défaut, une nouvelle ligne).

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)

    for scanner.Scan() {
        fmt.Println(scanner.Text())
        fmt.Println(scanner.Bytes())
    }
}

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