Home  >  Article  >  Backend Development  >  Essential for Golang development: Gob data encoding/decoding

Essential for Golang development: Gob data encoding/decoding

WBOY
WBOYOriginal
2024-04-08 08:33:02383browse

Gob library is used to encode and decode complex data structures. The encoding process uses reflection to convert the data structure into a sequence of bytes, and the decoding process converts the sequence of bytes into a data structure. In practical applications, Gob can be used for network transmission or persistent storage of data. For example, Gob-encoded Person structures can be sent and received between RPC servers.

Essential for Golang development: Gob data encoding/decoding

Golang development essentials: Gob encoding/decoding

Introduction
Gob is Golang A library for encoding/decoding complex data structures. It uses reflection to convert data structures into sequences of bytes that can be easily transmitted over the network or stored persistently.

Encoding

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()
}

Decoding

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)
}

Practical case
Send a Person structure To RPC server:

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)
    }
}

The above is the detailed content of Essential for Golang development: Gob data encoding/decoding. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn