Penting untuk pembangunan Golang: Pengekodan/penyahkodan data Gob

WBOY
Lepaskan: 2024-04-08 08:33:02
asal
389 orang telah melayarinya

Pustaka Gob untuk pengekodan dan penyahkodan struktur data yang kompleks. Proses pengekodan menggunakan refleksi untuk menukar struktur data kepada urutan bait, dan proses penyahkodan menukar jujukan bait kepada struktur data. Dalam aplikasi praktikal, Gob boleh digunakan untuk penghantaran rangkaian atau penyimpanan data yang berterusan. Sebagai contoh, struktur Orang yang dikodkan Gob boleh dihantar dan diterima antara pelayan RPC.

Penting untuk pembangunan Golang: Pengekodan/penyahkodan data Gob

Keperluan pembangunan Golang: Pengekodan/penyahkodan Gob

Pengenalan
Gob ialah perpustakaan di Golang untuk pengekodan/penyahkodan struktur data yang kompleks. Ia menggunakan refleksi untuk menukar struktur data kepada jujukan bait yang boleh dihantar dengan mudah melalui rangkaian atau disimpan secara berterusan.

Pengekodan

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()
}
Salin selepas log masuk

Penyahkodan

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)
}
Salin selepas log masuk

Kes praktikal
Hantar struktur Orang ke pelayan 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)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Penting untuk pembangunan Golang: Pengekodan/penyahkodan data Gob. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!