0Pricing
Go Academy · Pelajaran

Streaming JSON dan CSV

json.Decoder dan encoding/csv untuk data berukuran besar

Streaming JSON dan CSV adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Mengapa menggunakan pemrosesan aliran?

Memuat seluruh berkas JSON atau CSV berukuran besar ke memori menyebabkan penggunaan heap yang tinggi. Pemrosesan aliran memproses rekaman satu per satu, sehingga penggunaan memori tetap stabil berapa pun ukuran berkasnya.

json.Decoder untuk pemrosesan aliran

json.NewDecoder membungkus io.Reader apa pun. Gunakan Token() untuk menelusuri aliran token JSON atau gunakan Decode dalam perulangan untuk larik JSON.

dec := json.NewDecoder(file)
// consume opening [
for dec.More() {
    var record Record
    dec.Decode(&record)
    process(record)
}

Mendeteksi awal larik

Panggil dec.Token() untuk menggunakan kurung siku pembuka sebelum perulangan dekode:

t, _ := dec.Token() // consume [
for dec.More() {
    var r Record
    dec.Decode(&r)
}

Pemrosesan aliran dari HTTP

Dekode JSON secara langsung dari isi respons HTTP tanpa menyangga seluruh respons:

resp, _ := http.Get(url)
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
for dec.More() {
    var item Item
    dec.Decode(&item)
    process(item)
}

Pembaca encoding/csv

csv.NewReader membaca baris CSV satu per satu. Atur LazyQuotes, TrimLeadingSpace, dan Comment untuk menangani berbagai varian CSV di dunia nyata.

r := csv.NewReader(file)
for {
    record, err := r.Read()
    if err == io.EOF { break }
    if err != nil { return err }
    process(record)
}

Melewati tajuk CSV

Baca dan buang rekaman pertama untuk melewati baris tajuk:

r.Read() // discard header
for {
    record, err := r.Read()
    if err == io.EOF { break }
}

csv.Writer

Tulis CSV baris demi baris dengan csv.NewWriter. Selalu panggil w.Flush() dan periksa w.Error() setelah menulis.

w := csv.NewWriter(file)
w.Write([]string{"name", "age"})
w.Flush()
if err := w.Error(); err != nil { return err }

Pembatas khusus

Berkas CSV terkadang menggunakan titik koma atau tab. Atur r.Comma ke rune yang diinginkan.

r := csv.NewReader(file)
r.Comma = ';' // semicolon-separated

Baris JSON dengan pemrosesan aliran (NDJSON)

JSON yang dipisahkan oleh baris baru (satu objek JSON per baris) mudah diproses secara aliran: baca baris demi baris dan dekode setiap baris secara terpisah.

scanner := bufio.NewScanner(file)
for scanner.Scan() {
    var record Record
    json.Unmarshal(scanner.Bytes(), &record)
}

Profil memori streaming

Dengan streaming, alokasi memori dinamis tetap sebesar O(ukuran rekaman), bukan O(ukuran berkas). Untuk berkas berukuran 1 GB yang berisi rekaman berukuran 1 KB, streaming menggunakan sekitar 1 KB, dibandingkan sekitar 1 GB jika dimuat seluruhnya ke memori.

Pembatalan Context dalam streaming

Periksa ctx.Done() di dalam perulangan dekode untuk menghentikan streaming saat konteks dibatalkan, sehingga mencegah goroutine terus membaca hingga EOF.

for dec.More() {
    select {
    case <-ctx.Done():
        return ctx.Err()
    default:
    }
    dec.Decode(&record)
}

Pemeriksaan Singkat

Apa kelebihan streaming JSON dengan json.Decoder dibandingkan json.Unmarshal?

Rangkuman: Streaming JSON dan CSV

Poin penting:

  • json.Decoder: lakukan perulangan dengan dec.More() untuk array JSON
  • csv.NewReader: baca baris demi baris; tetapkan Comma untuk pemisah khusus
  • NDJSON: bufio.Scanner + Unmarshal per baris
  • Streaming menjaga penggunaan memori tetap konstan, terlepas dari ukuran berkas

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Streaming JSON dan CSV” gratis?

Ya — teks lengkap “Streaming JSON dan CSV” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Streaming JSON dan CSV”?

json.Decoder dan encoding/csv untuk data berukuran besar Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Streaming JSON dan CSV” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membaca File dengan os dan bufio
  2. Menulis File dan File Sementara
  3. Pengodean dan Penguraian JSON
  4. Streaming JSON dan CSV
← Kembali ke Go Academy