Maison développement back-end Golang Comment sérialiser les types personnalisés lors de l'utilisation de Golang ?

Comment sérialiser les types personnalisés lors de l'utilisation de Golang ?

Jun 03, 2024 pm 05:07 PM
序列化 自定义类型

Dans Go, les méthodes de sérialisation des types personnalisés sont : l'implémentation de l'interface json.Marshaler lors de l'utilisation de la sérialisation JSON et l'implémentation des interfaces GobEncoder et GobDecoder dans le package encoding/gob lors de l'utilisation de la sérialisation Gob.

使用 Golang 时如何对自定义类型进行序列化?

Sérialiser les types personnalisés à l'aide de Golang

Dans Golang, la sérialisation fait référence à la conversion de l'état d'un objet dans un format qui peut être stocké ou transmis. Pour les types personnalisés, vous devez implémenter l'interface de sérialisation dans le package encoding/json ou encoding/gob. encoding/json 或者 encoding/gob 包中的序列化接口。

使用 JSON 序列化

  • 实现 json.Marshaler 接口,实现 MarshalJSON 方法。
  • MarshalJSON 方法接收自定义类型的值并返回其 JSON 表示。

实战案例:序列号员工结构体

package main

import (
    "encoding/json"
    "fmt"
)

// Employee is a custom type representing an employee.
type Employee struct {
    Name   string
    Age    int
    Skills []string
}

// MarshalJSON implements the json.Marshaler interface.
func (e Employee) MarshalJSON() ([]byte, error) {
    type Alias Employee
    return json.Marshal(&struct{ Alias }{e})
}

func main() {
    emp := Employee{Name: "John Doe", Age: 30, Skills: []string{"golang", "javascript"}}

    encoded, err := json.Marshal(emp)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println("JSON:", string(encoded))
}
Copier après la connexion

使用 Gob 序列化

  • 实现 encoding/gob 包中的 GobEncoderGobDecoder 接口。
  • GobEncode 方法接收自定义类型的值并将其写入一个缓冲区。
  • GobDecode
Utilisez la sérialisation JSON

  • Implémentez l'interface json.Marshaler et implémentez la méthode MarshalJSON.
  • La méthode MarshalJSON reçoit une valeur d'un type personnalisé et renvoie sa représentation JSON.

    🎜🎜🎜Cas pratique : Structure des employés du numéro de série🎜🎜
    package main
    
    import (
        "encoding/gob"
        "fmt"
        "io/ioutil"
        "os"
    )
    
    // ComplexStruct represents a complex data structure.
    type ComplexStruct struct {
        Map        map[string]int
        Slice      []int
        InnerStruct struct {
            Field1 string
            Field2 int
        }
    }
    
    func main() {
        // Register the ComplexStruct type for serialization.
        gob.Register(ComplexStruct{})
    
        // Create a ComplexStruct instance.
        cs := ComplexStruct{
            Map: map[string]int{"key1": 1, "key2": 2},
            Slice: []int{3, 4, 5},
            InnerStruct: struct {
                Field1 string
                Field2 int
            }{"value1", 6},
        }
    
        // Encode the ComplexStruct to a file.
        f, err := os.Create("data.gob")
        if err != nil {
            fmt.Println("Error creating file:", err)
            return
        }
        defer f.Close()
    
        enc := gob.NewEncoder(f)
        if err := enc.Encode(cs); err != nil {
            fmt.Println("Error encoding:", err)
            return
        }
    
        // Decode the ComplexStruct from the file.
        data, err := ioutil.ReadFile("data.gob")
        if err != nil {
            fmt.Println("Error reading file:", err)
            return
        }
    
        dec := gob.NewDecoder(bytes.NewReader(data))
        var decoded ComplexStruct
        if err := dec.Decode(&decoded); err != nil {
            fmt.Println("Error decoding:", err)
            return
        }
    
        // Print the decoded struct.
        fmt.Println("Decoded:", decoded)
    }
    Copier après la connexion
    🎜🎜Utilisation de la sérialisation Gob🎜🎜
    • Implémenter GobEncoderdans le package encoding/gob > et l'interface GobDecoder. 🎜
    • La méthode GobEncode reçoit une valeur de type personnalisée et l'écrit dans un tampon. La méthode 🎜
    • GobDecode lit les données du tampon et restaure la valeur du type personnalisé. 🎜🎜🎜🎜Cas pratique : le numéro de série est une structure complexe🎜🎜rrreee

    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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

En Java, comment sérialiser une liste d'objets en utilisant flexjson ? En Java, comment sérialiser une liste d'objets en utilisant flexjson ? Sep 05, 2023 pm 11:09 PM

Flexjson est une bibliothèque légère permettant de sérialiser et de désérialiser des objets Java vers et depuis le format JSON. Nous pouvons sérialiser une liste d'objets en utilisant la méthode serialize() de la classe JSONSerializer. Cette méthode effectue une sérialisation superficielle sur l'instance cible. Nous devons passer une liste d'objets de type liste en paramètre à la méthode serialize(). Exemple de syntaxe publicStringserialize(Objecttarget) importflexjson.JSONSerializer;importjava.util.*;publicclassJsonSerial

Comment la sérialisation Java affecte-t-elle les performances ? Comment la sérialisation Java affecte-t-elle les performances ? Apr 16, 2024 pm 06:36 PM

L'impact de la sérialisation sur les performances Java : le processus de sérialisation repose sur la réflexion, ce qui affectera considérablement les performances. La sérialisation nécessite la création d'un flux d'octets pour stocker les données d'objet, ce qui entraîne des coûts d'allocation de mémoire et de traitement. La sérialisation d'objets volumineux consomme beaucoup de mémoire et de temps. Les objets sérialisés augmentent la charge lorsqu'ils sont transmis sur le réseau.

Compétences en traitement de données PHP : comment utiliser les fonctions de sérialisation et de désérialisation pour implémenter la sérialisation et la désérialisation des données Compétences en traitement de données PHP : comment utiliser les fonctions de sérialisation et de désérialisation pour implémenter la sérialisation et la désérialisation des données Jul 29, 2023 am 10:49 AM

Compétences en traitement de données PHP : Comment utiliser les fonctions de sérialisation et de désérialisation pour implémenter la sérialisation et la désérialisation des données. La sérialisation et la désérialisation sont l'une des compétences de traitement de données couramment utilisées en informatique. En PHP, nous pouvons utiliser les fonctions serialize() et unserialize() pour implémenter des opérations de sérialisation et de désérialisation de données. Cet article vous donnera une introduction détaillée sur la façon d'utiliser ces deux fonctions et fournira des exemples de code pertinents. 1. Qu'est-ce que la sérialisation et la désérialisation dans la programmation informatique ?

Comment la bibliothèque de fonctions C++ effectue-t-elle la sérialisation et la désérialisation ? Comment la bibliothèque de fonctions C++ effectue-t-elle la sérialisation et la désérialisation ? Apr 18, 2024 am 10:06 AM

Guide de sérialisation et de désérialisation de la bibliothèque C++ Sérialisation : création d'un flux de sortie et conversion au format d'archive. Sérialisez les objets dans l'archive. Désérialisation : crée un flux d'entrée et le restaure à partir du format d'archive. Désérialisez les objets de l'archive. Exemple pratique : Sérialisation : Création d'un flux de sortie. Créez un objet d'archive. Créez et sérialisez des objets dans l'archive. Désérialisation : créez un flux d'entrée. Créez un objet d'archive. Créez des objets et désérialisez-les à partir de l'archive.

Quelles sont les exigences pour que les fonctions C++ renvoient des types personnalisés ? Quelles sont les exigences pour que les fonctions C++ renvoient des types personnalisés ? Apr 19, 2024 pm 03:33 PM

Les fonctions C++ peuvent renvoyer des types personnalisés qui répondent aux exigences suivantes : Le type est entièrement défini. Constructeur par défaut. Les types valeur nécessitent des constructeurs de copie.

Comment définir et utiliser des types personnalisés à l'aide du langage Go ? Comment définir et utiliser des types personnalisés à l'aide du langage Go ? Jun 05, 2024 pm 12:41 PM

Dans Go, les types personnalisés peuvent être définis à l'aide du mot-clé type (struct) et contenir des champs nommés. Ils sont accessibles via des opérateurs d'accès aux champs et peuvent être associés à des méthodes pour manipuler l'état de l'instance. Dans les applications pratiques, les types personnalisés sont utilisés pour organiser des données complexes et simplifier les opérations. Par exemple, le système de gestion des étudiants utilise le type personnalisé Étudiant pour stocker les informations sur les étudiants et fournir des méthodes de calcul des notes moyennes et des taux de fréquentation.

Comment sérialiser l'ordre des propriétés à l'aide de la bibliothèque Jackson en Java ? Comment sérialiser l'ordre des propriétés à l'aide de la bibliothèque Jackson en Java ? Aug 28, 2023 pm 12:45 PM

@JsonPropertyOrder est une annotation utilisée au niveau de la classe. Il prend comme attribut une liste de champs qui définit l'ordre dans lequel les champs apparaissent dans la chaîne générée par la sérialisation JSON de l'objet. Les propriétés incluses dans la déclaration d'annotation peuvent être sérialisées en premier (dans l'ordre dans lequel elles sont définies), suivies de toutes les propriétés non incluses dans la définition. Syntaxe public@interfaceJsonPropertyOrder Exemple importcom.fasterxml.jackson.core.*;importcom.fasterxml.jackson.databind.*;importcom.fasterxml.jac

Sérialisation et désérialisation d'interfaces et de classes abstraites en Java Sérialisation et désérialisation d'interfaces et de classes abstraites en Java May 02, 2024 am 08:33 AM

Les interfaces ne peuvent pas être sérialisées directement. Les classes abstraites peuvent être sérialisées, mais seulement si elles ne contiennent pas de champs non statiques et non transitoires ou si elles ne remplacent pas les méthodes writeObject() et readObject(). Des instances spécifiques peuvent être implémentées via des classes concrètes qui implémentent l'interface. ou remplacez writeObject() et readObject, implémentation de la classe abstraite de la méthode ().

See all articles