Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memproses Fail JSON Besar dengan Cekap dalam Go untuk Mengelakkan Keletihan Memori?

Bagaimanakah Saya Boleh Memproses Fail JSON Besar dengan Cekap dalam Go untuk Mengelakkan Keletihan Memori?

Linda Hamilton
Linda Hamiltonasal
2024-12-17 04:33:25465semak imbas

How Can I Efficiently Process Large JSON Files in Go to Avoid Memory Exhaustion?

Menstrim Fail JSON Skala Besar

Menyahkod tatasusunan JSON besar-besaran daripada fail boleh menghadapi masalah memori apabila cuba memuatkan semua data sekaligus. Untuk menangani cabaran ini, teknik penstriman boleh digunakan.

Dalam contoh yang disediakan, menggunakan json.Unmarshal pada fail JSON yang meluas mengakibatkan kehabisan memori akibat pemuatan keseluruhan tatasusunan.

Untuk mengelakkan ini , pertimbangkan menstrim elemen JSON secara berurutan. Berikut ialah pendekatan berdasarkan contoh dokumentasi Golang:

import (
    "encoding/json"
    "fmt"
    "strings"
)

func main() {
    const jsonStream = `
                [
                    {"Name": "Ed", "Text": "Knock knock."},
                    {"Name": "Sam", "Text": "Who's there?"},
                    {"Name": "Ed", "Text": "Go fmt."},
                    {"Name": "Sam", "Text": "Go fmt who?"},
                    {"Name": "Ed", "Text": "Go fmt yourself!"}
                ]
            `
    type Message struct {
        Name, Text string
    }
    dec := json.NewDecoder(strings.NewReader(jsonStream))

    for dec.More() {
        var m Message
        if err := dec.Decode(&m); err != nil {
            fmt.Println(err)
            return
        }
        fmt.Printf("%v: %v\n", m.Name, m.Text)
    }
}

Dengan menstrim elemen, kod memprosesnya secara berurutan, mengurangkan penggunaan memori. Ambil perhatian bahawa contoh ini adalah berdasarkan input rentetan; ia boleh diubah suai untuk membaca daripada fail mengikut keperluan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memproses Fail JSON Besar dengan Cekap dalam Go untuk Mengelakkan Keletihan Memori?. 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