Maison >développement back-end >Golang >Comment puis-je traiter efficacement des fichiers JSON volumineux dans Go pour éviter l'épuisement de la mémoire ?

Comment puis-je traiter efficacement des fichiers JSON volumineux dans Go pour éviter l'épuisement de la mémoire ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 04:33:25462parcourir

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

Diffusion en continu de fichiers JSON à grande échelle

Le décodage de tableaux JSON massifs à partir de fichiers peut rencontrer des problèmes de mémoire lorsque vous tentez de charger toutes les données en même temps. Pour relever ce défi, des techniques de streaming peuvent être utilisées.

Dans l'exemple fourni, l'utilisation de json.Unmarshal sur un fichier JSON volumineux entraîne un épuisement de la mémoire en raison du chargement de l'ensemble du tableau.

Pour éviter cela , envisagez de diffuser les éléments JSON de manière séquentielle. Voici une approche basée sur l'exemple de la documentation 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)
    }
}

En diffusant les éléments en continu, le code les traite de manière séquentielle, réduisant ainsi la consommation de mémoire. Notez que cet exemple est basé sur une entrée de chaîne ; il peut être modifié pour lire à partir d'un fichier selon les besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn