Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memproses Fail CSV Besar dengan Cekap dalam Go?

Bagaimana untuk Memproses Fail CSV Besar dengan Cekap dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 04:49:30520semak imbas

How to Efficiently Process Large CSV Files in Go?

Baca dan Tulis Data CSV yang Cekap dalam Go

Kod Go yang disediakan membaca fail CSV yang besar dengan 10,000 rekod, melakukan pengiraan dan kemudian menulis nilai asal ke CSV lain dengan lajur skor tambahan. Walau bagaimanapun, prosesnya perlahan, mengambil masa berjam-jam untuk disiapkan. Artikel ini menyiasat kemungkinan ketidakcekapan dalam operasi membaca dan menulis CSV untuk mengoptimumkan kod.

Satu pengoptimuman utama adalah untuk mengelakkan memuatkan keseluruhan fail ke dalam memori sekaligus. Kod asal menggunakan ReadAll() untuk membaca semua rekod ke dalam kepingan, yang tidak cekap untuk fail besar. Sebaliknya, pendekatan penstriman lebih disukai, di mana fail diproses satu baris pada satu masa.

Untuk melaksanakan ini, kita boleh menggunakan goroutine untuk membaca fail CSV baris demi baris dan menghantar rekod ke saluran. Goroutine utama boleh menggunakan rekod dari saluran, melakukan pengiraan dan menulis keputusan ke CSV output. Berikut ialah contoh pelaksanaan:

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

Dalam kod ini, fungsi processCSV() mengambil pembaca dan mengembalikan saluran yang mengeluarkan rekod daripada fail CSV. Goroutine utama kemudiannya boleh menggunakan saluran ini untuk memproses dan menulis rekod dengan cekap.

Dengan menggunakan pendekatan penstriman ini, kami boleh meningkatkan prestasi operasi baca dan tulis CSV dengan ketara, menjadikan kod lebih cekap untuk pemprosesan besar. Fail CSV.

Atas ialah kandungan terperinci Bagaimana untuk Memproses Fail CSV Besar dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn