ホームページ >バックエンド開発 >Golang >Go で CSV ファイルを効率的に読み書きするにはどうすればよいですか?

Go で CSV ファイルを効率的に読み書きするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 08:03:03513ブラウズ

How to Efficiently Read and Write CSV Files in Go?

Go での CSV ファイルの効率的な読み取りと書き込み

データ処理における一般的なタスクの 1 つは、パフォーマンスの高い方法で CSV ファイルの読み取りと書き込みを行うことです。質問で提供されているコード スニペットは、CSV ファイルを読み取り、データを処理し、書き戻すための遅い方法を示しています。処理前にファイル全体をメモリにロードするアプローチには、潜在的な非効率性があります。

コードを最適化するには、.Read() を呼び出してファイルを段階的に読み取り、一度に 1 行ずつ処理することをお勧めします。これにより、ファイル全体がメモリに読み込まれることがなくなり、特に大きなファイルの場合、パフォーマンスが大幅に向上します。

代替アプローチは次のとおりです。

<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>

このアプローチでは、チャネルを使用してデータを渡します。レコードをリーダーのゴルーチンからメインのゴルーチンに転送して処理することで、より効率的な増分処理アプローチが可能になります。

データを増分的に読み取り、処理するこの手法を採用することで、CSV 読み取りのパフォーマンスを大幅に向上させることができます。そしてコードを書きます。

以上がGo で CSV ファイルを効率的に読み書きするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。