Maison > développement back-end > Golang > Essentiel pour le développement de Golang : encodage/décodage des données Gob

Essentiel pour le développement de Golang : encodage/décodage des données Gob

WBOY
Libérer: 2024-04-08 08:33:02
original
433 Les gens l'ont consulté

Bibliothèque Gob pour encoder et décoder des structures de données complexes. Le processus de codage utilise la réflexion pour convertir la structure de données en une séquence d'octets, et le processus de décodage convertit la séquence d'octets en une structure de données. Dans des applications pratiques, Gob peut être utilisé pour la transmission réseau ou le stockage persistant de données. Par exemple, les structures Personne codées Gob peuvent être envoyées et reçues entre les serveurs RPC.

Essentiel pour le développement de Golang : encodage/décodage des données Gob

Les essentiels du développement Golang : encodage/décodage Gob

Introduction
Gob est une bibliothèque en Golang pour encoder/décoder des structures de données complexes. Il utilise la réflexion pour convertir les structures de données en séquences d'octets qui peuvent être facilement transmises sur le réseau ou stockées de manière persistante.

Encodage

import (
    "encoding/gob"
    "bytes"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    // 创建一个 Person 结构体
    person := Person{Name: "John", Age: 30}

    // 创建一个 bytes.Buffer 来存储编码后的数据
    buf := new(bytes.Buffer)

    // 使用 Gob 编码器对 person 进行编码
    encoder := gob.NewEncoder(buf)
    err := encoder.Encode(person)
    if err != nil {
        fmt.Println(err)
    }

    // 获取编码后的字节序列
    encodedBytes := buf.Bytes()
}
Copier après la connexion

Décodage

import (
    "encoding/gob"
    "bytes"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    // 创建一个 bytes.Buffer 来存储编码后的数据
    buf := bytes.NewBuffer([]byte{104, 111, 110, ...}) // 此处应替换为实际的编码数据

    // 使用 Gob 解码器对编码后的数据进行解码
    decoder := gob.NewDecoder(buf)
    var person Person
    err := decoder.Decode(&person)
    if err != nil {
        fmt.Println(err)
    }

    // 获取解码后的 Person 结构体
    fmt.Println(person)
}
Copier après la connexion

Cas pratique
Envoyer une structure Personne au serveur RPC :

import (
    "encoding/gob"
    "bytes"
    "net/rpc"
)

type Person struct {
    Name string
    Age  int
}

type Args struct {
    Person Person
}

type RPCServer struct {
}

func (s *RPCServer) SendPerson(args *Args, reply *string) error {
    fmt.Println(args.Person)
    return nil
}

func main() {
    // 创建一个客户端
    client, err := rpc.Dial("tcp", "localhost:1234")
    if err != nil {
        fmt.Println(err)
    }

    // 创建一个 Person 结构体
    person := Person{Name: "John", Age: 30}

    // 创建一个 bytes.Buffer 来存储编码后的数据
    buf := new(bytes.Buffer)

    // 使用 Gob 编码器对 person 进行编码
    encoder := gob.NewEncoder(buf)
    err = encoder.Encode(person)
    if err != nil {
        fmt.Println(err)
    }

    // 获取编码后的字节序列
    encodedBytes := buf.Bytes()

    // 将编码后的字节序列作为参数传递给 RPC 方法
    err = client.Call("RPCServer.SendPerson", &Args{Person: encodedBytes}, nil)
    if err != nil {
        fmt.Println(err)
    }
}
Copier après la connexion

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal