Effizientes Lesen und Schreiben von CSV-Dateien in Go
Eine häufige Aufgabe in der Datenverarbeitung ist das performante Lesen und Schreiben von CSV-Dateien. Der in der Frage bereitgestellte Codeausschnitt zeigt eine langsame Methode zum Lesen einer CSV-Datei, zum Verarbeiten der Daten und zum Zurückschreiben. Eine potenzielle Ineffizienz liegt in dem Ansatz, die gesamte Datei vor der Verarbeitung in den Speicher zu laden.
Um den Code zu optimieren, wird empfohlen, die Datei schrittweise durch Aufruf von .Read() zu lesen und jeweils eine Zeile nach der anderen zu verarbeiten. Dadurch wird verhindert, dass die gesamte Datei in den Speicher geladen wird, was die Leistung insbesondere bei großen Dateien erheblich verbessern kann.
Hier ist ein alternativer Ansatz:
<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>
Dieser Ansatz verwendet einen Kanal zum Übergeben Datensätze von der Reader-Goroutine zur Haupt-Goroutine zur Verarbeitung übertragen, was einen effizienteren inkrementellen Verarbeitungsansatz ermöglicht.
Durch die Übernahme dieser Technik, bei der Daten inkrementell gelesen und verarbeitet werden, können Sie die Leistung Ihres CSV-Lesens erheblich verbessern und Code schreiben.
Das obige ist der detaillierte Inhalt vonWie kann ich CSV-Dateien in Go effizient lesen und schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!