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-separatedBaris 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
- Membaca File dengan os dan bufio
- Menulis File dan File Sementara
- Pengodean dan Penguraian JSON
- Streaming JSON dan CSV