Maison >développement back-end >Golang >Comment traiter efficacement des fichiers CSV volumineux dans Go ?
Lecture et écriture efficaces des données CSV dans Go
Le code Go fourni lit un gros fichier CSV contenant 10 000 enregistrements, effectue des calculs et écrit ensuite les valeurs d'origine dans un autre CSV avec une colonne de score supplémentaire. Cependant, le processus est lent et prend des heures. Cet article étudie les inefficacités potentielles dans les opérations de lecture et d'écriture CSV pour optimiser le code.
Une optimisation clé consiste à éviter de charger l'intégralité du fichier en mémoire en une seule fois. Le code original utilise ReadAll() pour lire tous les enregistrements dans une tranche, ce qui n'est pas efficace pour les fichiers volumineux. Au lieu de cela, une approche de streaming est préférable, où le fichier est traité une ligne à la fois.
Pour mettre en œuvre cela, nous pouvons utiliser une goroutine pour lire le fichier CSV ligne par ligne et envoyer les enregistrements à un canal. La goroutine principale peut consommer les enregistrements du canal, effectuer des calculs et écrire les résultats dans le CSV de sortie. Voici un exemple d'implémentation :
<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>
Dans ce code, la fonction processCSV() prend un lecteur et renvoie un canal qui émet les enregistrements du fichier CSV. La goroutine principale peut ensuite utiliser ce canal pour traiter et écrire efficacement les enregistrements.
En utilisant cette approche de streaming, nous pouvons améliorer considérablement les performances des opérations de lecture et d'écriture CSV, rendant le code plus efficace pour le traitement de gros volumes. Fichiers 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!