Lecture et écriture efficaces de fichiers CSV dans Go
Une tâche courante dans le traitement des données consiste à lire et à écrire des fichiers CSV de manière performante. L'extrait de code fourni dans la question démontre une méthode lente pour lire un fichier CSV, traiter les données et les réécrire. Une inefficacité potentielle réside dans l'approche consistant à charger l'intégralité du fichier en mémoire avant le traitement.
Pour optimiser le code, il est recommandé de lire le fichier de manière incrémentielle en appelant .Read() et de traiter une ligne à la fois. Cela empêche le chargement de l'intégralité du fichier en mémoire, ce qui peut améliorer considérablement les performances, en particulier pour les fichiers volumineux.
Voici une approche alternative :
<code class="go">func processCSV(rc io.Reader) (ch chan []string) { ch = make(chan []string, 10) go func() { r := csv.NewReader(rc) if _, err := r.Read(); err != nil { //read header log.Fatal(err) } defer close(ch) for { rec, err := r.Read() if err != nil { if err == io.EOF { break } log.Fatal(err) } ch <- rec } }() return }</code>
Cette approche utilise un canal pour transmettre enregistrements de la goroutine du lecteur à la goroutine principale pour le traitement, permettant une approche de traitement incrémental plus efficace.
En adoptant cette technique, qui implique la lecture et le traitement des données progressivement, vous pouvez améliorer considérablement les performances de lecture et d'écriture de votre code CSV.
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!