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 :
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) }
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 } } }
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!